import pandas as pd
customer = pd.read_csv("data/customer_churn.csv")
customer.head()技术支持
接下来,我们将创建自变量(X)和因变量(y)。然后将数据集划分为训练集和测试集。
X = customer.drop("Churn", axis=1)
y = customer.Churn
# Split into train and test from sklearn.model_selection import train_test_split, cross_val_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)技术支持
from sklearn.metrics import classification_report
# Make prediction on the testing data
y_pred = pipeline.predict(X_test)# Classification Reportprint(classification_report(y_pred, y_test))技术支持
我们的模型在多数类“0”上达到了 96% 精确率和 97% 召回率,但在少数类“1”上的表现较差。
为更深入地理解模型表现,我们将进行交叉验证并计算相应得分。
# Evaluate the classifier using cross-validation
cv_scores = cross_val_score(pipeline, X, y, cv=5)print(f"Cross-validation scores: {cv_scores}")print(f"Mean CV accuracy: {np.mean(cv_scores):.2f}")技术支持
得分波动较大,最高达 95%,最低为 92%。
Cross-validation scores:[0.950793650.941269840.934920630.942857140.92222222]
Mean CV accuracy:0.94技术支持
from sklearn.ensemble import BaggingClassifier
# Create a bagging classifier with the decision tree pipeline
bagging_classifier = BaggingClassifier(base_estimator=pipeline, n_estimators=50, random_state=42)# Train the bagging classifier on the training data
bagging_classifier.fit(X_train, y_train)技术支持
评估集成模型
接下来评估集成模型的结果,并与单一模型的表现进行比较。为此,我们将在测试数据集上生成分类报告。
# Make prediction on the testing data
y_pred = bagging_classifier.predict(X_test)# Classification Reportprint(classification_report(y_pred, y_test))技术支持
集成方法是机器学习中强大的技术,通过组合多个模型来提升整体预测准确率和模型稳定性。其中,自助聚合(Bootstrap Aggregating),更常见的名称是装袋(Bagging),是一种广受欢迎且广泛实现的集成方法。
在本教程中,我们将深入探讨装袋法的工作原理及其优势。我们会将其与另一种集成方法(提升法)进行比较,并在 Python 中给出装袋示例。阅读完毕后,您将对装袋法及其最佳实践有扎实的理解。
理解集成学习
集成建模是一种通过组合多个机器学习模型来提升整体预测性能的技术。其基本思想是:一组弱学习器可以汇聚成一个强学习器。
一个集成模型通常包括两个步骤:
集成往往能产生更好的结果,因为不同模型可以相互补充、弥补各自的弱点。同时还能降低方差,防止过拟合。
常见的集成方法包括装袋、提升和堆叠。集成学习广泛应用于分类、回归和聚类等机器学习任务,以提升准确性与鲁棒性。
什么是装袋(Bagging)?
装袋(自助聚合)是一种集成方法,它在数据的随机子集上独立训练多个模型,并通过投票或平均来聚合它们的预测。
具体而言,每个模型都在通过放回抽样得到的随机数据子集上训练,这意味着某些数据点可能被选择多次。该随机子集称为自助样本(bootstrap sample)。通过在不同的自助样本上训练模型,装袋可以降低单个模型的方差。它还通过让各个模型接触数据集的不同部分来避免过拟合。
随后,将所有采样模型的预测通过简单平均进行组合,得到整体预测。通过这种方式,聚合后的模型既能吸收各个模型的优点,又能相互抵消它们的误差。
装袋在降低方差和过拟合方面尤为有效,使模型更稳健、更准确,特别适用于个体模型易表现出较高波动性的场景。
装袋 vs. 提升
提升(Boosting)是另一种常被拿来与装袋比较的流行集成方法。二者的主要区别在于基本学习器的训练方式。
在装袋中,模型在数据的不同随机子集上并行、相互独立地训练;而在提升中,模型按顺序训练,每个模型都从前一个模型的错误中学习。此外,装袋通常采用对模型进行简单平均,而提升会根据准确率分配权重。
装袋主要降低方差,而提升主要降低偏差。装袋适用于如决策树这类不稳定模型;提升更适用于如线性回归这类稳定模型。
两种方法各有优劣。装袋更容易并行运行,而提升往往更强大、更准确。在实践中,针对新问题同时尝试二者并比较性能是有帮助的。
装袋的优势
以下是装袋的一些关键优势:
Python 中的装袋:简要教程
在本 Python 教程中,我们将在电信客户流失数据集上训练一个决策树分类模型,并使用装袋集成方法来提升其表现。我们将使用 DataLab 获取数据集并运行代码。代码也可在此DataLab 工作簿中获取,您可复制后直接在浏览器中运行,无需安装任何软件。
数据集
关于电信客户流失的数据集来自一家伊朗电信公司。数据集中每一行对应某位客户一年的活动信息,包括呼叫失败次数、订阅时长以及指示该客户是否已离网的流失标签。
首先,我们将加载数据集并查看前 5 行。
接下来,我们将创建自变量(X)和因变量(y)。然后将数据集划分为训练集和测试集。
训练机器学习模型
我们将创建一个简单的机器学习流水线,并在其上拟合训练数据。该流水线会在将输入送入决策树分类器前对数据进行标准化。
参加 Python 课程基于树的模型的机器学习,学习如何使用 scikit-learn 将树模型和集成用于回归和分类。
模型评估
我们将对决策树模型进行评估,以便与集成模型进行比较。
我们将在测试数据表上进行预测并生成分类报告。
我们的模型在多数类“0”上达到了 96% 精确率和 97% 召回率,但在少数类“1”上的表现较差。
为更深入地理解模型表现,我们将进行交叉验证并计算相应得分。
得分波动较大,最高达 95%,最低为 92%。
装袋分类器
现在,我们用流水线(标准化器 + 决策树分类器)作为基学习器创建一个装袋分类器,并在训练集上进行训练。
我们可以通过增大
n_estimators来提升模型性能,但 50 个基学习器足以作为基线结果。评估集成模型
接下来评估集成模型的结果,并与单一模型的表现进行比较。为此,我们将在测试数据集上生成分类报告。
如您所见,模型表现有所提升。少数类的精确率和召回率分别从 79% 提高到 80%、从 77% 提高到 82%。这是一项显著改进。
现在来计算交叉验证得分。
交叉验证得分的方差较低,范围在 94% 到 96% 之间。模型的整体准确率也从 94% 提升到了 95%。
装袋技术是机器学习应用中提升模型准确率与稳定性的有用工具。
在 Python 的集成方法课程中学习装袋、提升和堆叠等技术,构建更先进、更高效的机器学习模型。
最佳实践与技巧
在机器学习中使用装袋时,遵循以下最佳实践与技巧可最大化其效果:
n_estimators(如 100–200),以充分获益于装袋。n_jobs在多核/多机上加速训练。GridSearchCV优化每个模型的性能。单个模型表现良好通常会转化为更优的集成表现。阅读MLOps(机器学习工程)最佳实践,学习如何可靠、可扩展地部署机器学习系统。
结语
在本教程中,我们探讨了装袋法这一强大的机器学习集成技术。装袋通过聚合多个模型来提升整体预测性能。我们将其与提升法进行了比较,并了解了其相较单一模型的优势。
最后,我们在一个电信流失数据集上用 Python 实现了装袋分类器。由决策树组成的装袋集成在准确率和少数类表现上均优于单棵决策树。此外,我们还学习了多条实用技巧,以最大化装袋在机器学习中的效果。
如果您希望成为专业的机器学习工程师,可先报名参加Python 机器学习科学家职业路径。您将学习如何使用 Python 训练有监督、无监督以及深度学习模型。