sklearn 基础教程

sklearn 特征工程

sklearn 基础教程

sklearn 分类算法

sklearn 回归算法

sklearn 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/sklearn-adaboost-classifier.html

sklearn adaboost分类


sklearn的ensemble包中,实现了非常流行的adaboost分类算法。

ababoost的算法的详细说明不在这里讲述,请参见机器学习之Adaboost算法

sklearn的adaboost分类

sklearn中的adaboost实现是AdaBoostClassifier类,AdaBoostClassifier类实现了两种adaboost分类算法,Adaboost.SAMME.R和Adaboost.SAMME,关于两种算法细节请参见机器学习之Adaboost算法

AdaBoostClassfier是一个元估计器,它开始从最初原始训练数据中拟合一个分类器,然后接着用同样的训练数据进行迭代拟合训练下一个基分类器,虽然是同样的数据但是每次迭代时样本数据权重不一样,权重调整让下一个分类器更多地关注那些之前迭代中分错的样本。如此迭代,最终将所有训练出来的弱分类器组合成一个强分类器。

AdaBoostClassfier类构造方法

def __init__(self,
                 base_estimator=None,
                 n_estimators=50,
                 learning_rate=1.,
                 algorithm='SAMME.R',
                 random_state=None)

参数

  • base_estimator:选取的基分类器(弱分类器),默认是使用CART分类树DecisionTreeClassifier;基分类器必须要有classes_和n_classes_属性;另外值得注意的是,当AdaBoostClassfier采用SAMME.R算法时,基分类器必须有predict_proba方法,即支持分类的概率预测;
  • n_estimators:最大的学习迭代次数或者叫最多的基分类器个数,需要注意的是,在完全拟合数据的情况下,训练有可能在设置的迭代次数之前提前结束哦;默认为50次;
  • learning_rate:学习率(也称之为step,即步长),通俗一点讲就是基学习器权重缩减的系数,对于同样的训练集拟合效果,较小的步长意味着我们需要更多的迭代次数,通常我们用步长和迭代最大次数一起来决定算法的拟合效果。所以这两个参数n_estimators和learning_rate要一起调参。默认是1;
  • algorithm:实现了两种adaboost分类算法,SAMME和SAMME.R,在选择SAMME.R算法时,base_estimator必须支持概率预测的分类器;默认值为SAMME.R;
  • random_state:随机种子设置,为了重现随机训练;

最终分类器对象的相关属性

  • estimators_:多个基分类器列表;
  • classes_:分类的所有标,是一个数组;
  • n_classes_:分类的个数;
  • estimator_weights_:每个基分类器的权重,是一个浮点数数组;
  • estimator_errors_:每个基分类器的错误率,一个浮点数数组;
  • feature_importances_:每个特征的重要性,是一个浮点数数组,每项相加总和为1;需要注意的是,基分类器需要支持base_estimator;

示例

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import ensemble
from sklearn.metrics import classification_report

# 加载sklearn自带的iris(鸢尾花)数据集
iris = load_iris()

# 提取特征数据和目标数据
X = iris.data
y = iris.target

# 将数据集以9:1的比例随机分为训练集和测试集,为了重现随机分配设置随机种子,即random_state参数
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=188)

# 实例化分类器对象
clf = ensemble.AdaBoostClassifier()

# 分类器拟合训练数据
clf.fit(X_train, y_train)

# 训练完的分类器对测试数据进行预测
y_pred = clf.predict(X_test)

# classification_report函数用于显示主要分类指标的文本报告
print(classification_report(y_test, y_pred, target_names=['setosa', 'versicolor', 'virginica']))