Adaboost迭代器:将若干个弱分类器结合成一个强分类器,效果
adaboost属于集成算法,训练多个弱分类器组成一个强分类器。
一个强分类器有k个弱分类器组成。
1、先在所有分类器中寻找出最优的分类器器,作为第一个分类器;
2、通过计算得出第一个分类器的权重,并赋予样本新的权重,进行第二次分类选择;
3、重复前面动作,直到进行K次为止。
补充:adaboost不仅可以用作分类还可以用作回归。
如何使用:
from sklearn.ensemble import AdaBoostClassifier
AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)
其中有几个比较主要的参数,我分别来讲解下:
base_estimator:代表的是弱分类器。在 AdaBoost 的分类器和回归器中都有这个参数,在 AdaBoost 中默认使用的是决策树,一般我们不需要修改这个参数,当然你也可以指定具体的分类器。
n_estimators:算法的最大迭代次数,也是分类器的个数,每一次迭代都会引入一个新的弱分类器来增加原有的分类器的组合能力。默认是 50。
learning_rate:代表学习率,取值在 0-1 之间,默认是 1.0。如果学习率较小,就需要比较多的迭代次数才能收敛,也就是说学习率和迭代次数是有相关性的。当你调整 learning_rate 的时候,往往也需要调整 n_estimators 这个参数。
algorithm:代表我们要采用哪种 boosting 算法,一共有两种选择:SAMME 和 SAMME.R。默认是 SAMME.R。这两者之间的区别在于对弱分类权重的计算方式不同。
random_state:代表随机数种子的设置,默认是 None。随机种子是用来控制随机模式的,当随机种子取了一个值,也就确定了一种随机规则,其他人取这个值可以得到同样的结果。如果不设置随机种子,每次得到的随机数也就不同。
我们来看下KNN,决策树和Adaboost三者准确度对比吧!
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
data=load_boston()
train_x,test_x,train_y,test_y=train_test_split(data.data,data.target,test_size=0.33,random_state=33)
model=AdaBoostRegressor()
model.fit(train_x,train_y)
predic_y=model.predict(test_x)
# print(predic_y)
mes=mean_squared_error(predic_y,test_y)
print("adaboost均方差为:",round(mes,2))
clf=DecisionTreeRegressor()
clf.fit(train_x,train_y)
predic_yy=clf.predict(test_x)
mes1=mean_squared_error(predic_yy,test_y)
print("决策树均方差为:",round(mes1,2))
knn=KNeighborsRegressor()
knn.fit(train_x,train_y)
predic_y1=clf.predict(test_x)
mes2=mean_squared_error(predic_y1,test_y)
print("knn均方差为:",round(mes2,2))
结果:
adaboost均方差为: 16.44
决策树均方差为: 23.72
knn均方差为: 23.72
看到了吗?adaboost的误差更小哦!