机器学习算法彻底改变了处理各个领域复杂问题的方式。从预测股票价格到诊断疾病,这些算法都扮演着至关重要的角色。本文将深入探讨使用Python强大的scikit-learn库进行回归分析。尽管scikit-learn提供了大量的预构建模型,但对于任何有抱负的数据科学家或机器学习爱好者来说,从头开始理解这些算法的工作原理是至关重要的。在这些算法中,回归技术因其能够基于输入特征预测连续结果而脱颖而出。
其中一种回归技术是自适应提升算法,通常称为AdaBoost。AdaBoost是一种提升技术,它通过为错误分类的数据点分配更高的权重来迭代纠正之前模型的错误。通过顺序训练这些加权数据点上的弱学习器,AdaBoost构建了一个强大的集成模型,能够进行准确的预测。本文不仅探讨了AdaBoost的理论基础,还提供了使用Python的scikit-learn库的实践实现。此外,还讨论了超参数调整在优化AdaBoost性能中的重要性,展示了基础估计器和学习率等变化如何影响模型准确性。通过这种全面的探索,读者将对AdaBoost及其在现实世界场景中的实践应用有更深入的理解。
注意:如果对以视听格式学习概念更感兴趣,有整个文章的视频解释。如果不感兴趣,可以继续阅读。
在AdaBoost的情况下,错误分类或由前一个模型错误预测的数据点将被赋予更高的权重。这意味着每个连续的模型将获得加权输入。让通过一个例子来理解这是如何完成的。假设这是全部数据。在这里,有蓝色的正例和红色的负例。现在第一步是构建一个模型来分类这些数据。
假设第一个模型给出了以下结果,它能够正确分类左侧的两个蓝色点和所有的红色点。但该模型也错误分类了这里的三个蓝色点。
现在,这些错误分类的数据点将被赋予更高的权重。因此,这三个蓝色正例将在下一次迭代中被赋予更高的权重。为了表示,权重更高的点在图像中比其他点更大。给这些点赋予更高的权重意味着模型将更多地关注这些值。现在将构建一个新模型。
在第二个模型中,将看到模型边界已经向右移动,以便正确分类权重更高的点。尽管如此,它仍然不是一个完美的模型。会注意到三个红色负例被模型2错误分类。
现在,这些错误分类的红色点将获得更高的权重。再次构建另一个模型并进行预测。第三个模型的任务是关注这三个红色负例。因此,决策边界将如下所示。
这个新模型再次错误预测了一些数据点。此时,可以说所有这些单独的模型都不足以正确分类点,通常被称为弱学习器。
接下来该怎么做?需要聚合这些模型。一种方式可能是取个别弱学习器的加权平均值。因此,最终模型将是各个模型的加权平均值。
经过多次迭代后,将能够在所有之前的弱学习器的帮助下创建正确的决策边界。如所见,最终模型能够正确分类所有点。这个最终模型被称为强学习器。
让再次看看AdaBoost所采取的所有步骤。构建模型并进行预测。为错误分类的点分配更高的权重。构建下一个模型。重复步骤3和4。使用各个模型的加权平均值制作最终模型。
现在将看到AdaBoost算法在泰坦尼克号数据集上的实现。首先,导入所需的库pandas和NumPy,并从CSV文件中读取数据到pandas数据框中。
import pandas as pd
import numpy as np
data = pd.read_csv('titanic.csv')
print(data.head())
在这里,使用的是预处理过的数据。因此,可以看到这是一个分类问题,生存者被分类为1,未生存者被标记为0。
x = data.drop('Survived', axis=1)
y = data['Survived']
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, stratify=y)
现在将导入scikit-learn.ensemble中的AdaBoostClassifier,并创建一个实例。设置了随机状态值为96,以重现结果。然后使用train_x和train_y来训练模型。
from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(random_state=96)
model.fit(train_x, train_y)
现在让检查训练数据的得分,大约是0.84。现在将对测试数据做同样的操作,结果是0.79。
让看看AdaBoost模型的超参数。超参数是在开始建模过程之前给模型的值。让看看它们。
base_estimator: 集成模型,默认是决策树。
n_estimators: 要构建的模型数量。
learning_rate: 通过这个值缩小每个分类器的贡献。
random_state: 随机数种子,以便每次都生成相同的随机数。
为了尝试超参数,这次将base_estimator设置为RandomForestClassifier。使用100个估计器和学习率为0.01。现在使用train_x和train_y来训练模型,就像之前一样。接下来是检查新模型的得分。
model = AdaBoostClassifier(base_estimator=RandomForestClassifier(), n_estimators=100, learning_rate=0.01, random_state=96)
model.fit(train_x, train_y)