算法原理
集成算法的两种模式:投票选举(bagging)和再选举(boosting)。
AdaBoost(adaptive boost)自适应算法是集成算法的一种,同时也是一类算法的总称。这类算法通过训练多个弱分类器,将它们组合成一个强分类器。AdaBoost 算法是一个框架,可以指定任意的分类器,通常采用 CART分类器作为弱分类器。
算法流程:
1.获取基础权重
2.获取基础分类器
3.计算错误率,选择错误率最低的为最优分类器
4.通过计算分类器权重公式,达到减少正确样本数据分布,增加错误样本数据分布
5.代入W k+1,i和D k+1 的公式,得到新的权重矩阵
7.在新的权重矩阵上,计算错误率,选择错误最低的为最优分类器
迭代,重复直到迭代完成,获得强分类器。
如何在 sklearn 中创建 AdaBoost 分类器
用 AdaBoostClassifier(base_estimator=None, n_estimators=50,learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)
1. base_estimator:代表的是弱分类器。在 AdaBoost 的分类器和回归器中都有这个参数,在 AdaBoost 中默认使用的是决策树、
2. n_estimators:算法的最大迭代次数,也是分类器的个数,每一次迭代都会引入一个新的弱分类器来增加原有的分类器的组合能力。默认是 50。
3. learning_rate:代表学习率,取值在 0-1 之间,默认是 1.0。如果学习率较小,就需要比较多的迭代次数才能收敛,也就是说学习率和迭代次数是有相关性的。当你调整learning_rate 的时候,往往也需要调整 n_estimators 这个参数。
4. algorithm:代表我们要采用哪种 boosting 算法,一共有两种选择:SAMME 和SAMME.R。默认是 SAMME.R。这两者之间的区别在于对弱分类权重的计算方式不同。
5. random_state:代表随机数种子的设置,默认是 None。随机种子是用来控制随机模式的,当随机种子取了一个值,也就确定了一种随机规则,其他人取这个值可以得到同样的结果。如果不设置随机种子,每次得到的随机数也就不同。
如何创建 AdaBoost 回归呢?
用 AdaBoostRegressor(base_estimator=None, n_estimators=50,learning_rate=1.0, loss=‘linear’, random_state=None) 这个函数。
回归和分类的参数基本是一致的,不同点在于回归算法里没有 algorithm 这个参数,但多了一个 loss 参数。
loss 代表损失函数的设置,一共有 3 种选择,分别为 linear、square 和 exponential,它们的含义分别是线性、平方和指数。默认是线性。一般采用线性就可以得到不错的效果。
创建好 AdaBoost 分类器或回归器之后,我们就可以输入训练集对它进行训练。我们使用fit 函数,传入训练集中的样本特征值 train_X 和结果 train_y,模型会自动拟合。使用predict 函数进行预测,传入测试集中的样本特征值 test_X,然后就可以得到预测结果。
用 AdaBoost 对房价进行预测
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.ensemble import AdaBoostRegressor
# 加载数据
data=load_boston()
# 分割数据
train_x, test_x, train_y, test_y = train_test_split(data.data, data.target, test_size=0.25, random_state=33)
# 使用 AdaBoost 回归模型
regressor=AdaBoostRegressor()
regressor.fit(train_x,train_y)
pred_y = regressor.predict(test_x)
mse = mean_squared_error(test_y, pred_y)
print(" 房价预测结果 ", pred_y)
print(" 均方误差 = ",round(mse,2))