美文网首页
机器学习中的集成方法(3)--Boosting(分步法)

机器学习中的集成方法(3)--Boosting(分步法)

作者: Byte猫 | 来源:发表于2019-05-30 00:33 被阅读0次

一、概念理解

Boosting 是指个体学习器之间存在强依赖关系,必须串行序列化生成的集成学习方法。Boosting意为提升,意思是希望将每个弱学习器提升为强学习器。
Bagging中所有的分类器是可以同时生成的,之间没有什么关系,而Boosting中则必须先生成第一个分类器,然后根据第一个分类器的结果生成第二个分类器(基学习器间存在强依赖关系),依次往后进行。

首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重(被错分的样本权重加大,反之减小),使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。Boosting算法的本质旨在减小学习的偏差,能够基于泛化精度很差的学习器个体构建出强集成。

二、执行步骤

假设有1000个样本,70%的样本作为训练集,30%的样本作为测试集。
STEP1:开始时,所有样本的权重相同,训练得到第一个基分类器。
STEP2:根据上一轮基分类器的分类效果调整每个样本的权重(上一轮分错的样本权重提高,分对的样本权重降低),之后根据新得到样本的权重指导本轮中的基分类器训练,即在考虑样本不同权重的情况下得到本轮错误率最低的基分类器。
STEP3:重复以上步骤2直至训练到约定的轮数结束(例如100轮),每一轮训练得到一个基分类器
STEP4:用这100个基学习器对测试集的每一个样本都进行测试,然后通过投票的方式决定测集样本的预测结果。如果一个样本被这100个基学习器投票,即预测分类,被分为1的票数有80票,被分为0的有20票,显然,这个样本的预测结果为1。

三、使用sklearn库实现Boosting方法

#-*- coding:utf-8 -*-
'''
Boosting方法
'''
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

#========================================================
#  载入iris数据集
#========================================================

iris = load_iris()
X = iris.data[:,:5]
y = iris.target

print('feature=',X)
print('target=',y)

#========================================================
#  实现Boosting集成
#========================================================

def BoostingMethod(X, y):
    '''
    Boosting方法实现分类
    INPUT -> 特征, 分类标签
    '''
    scaler = StandardScaler() # 标准化转换
    scaler.fit(X)  # 训练标准化对象
    traffic_feature= scaler.transform(X)   # 转换数据集
    feature_train, feature_test, target_train, target_test = train_test_split(X, y, test_size=0.3, random_state=0)
    tree = DecisionTreeClassifier(criterion='entropy', max_depth=1)

    clf = AdaBoostClassifier(base_estimator=tree, 
                            n_estimators=200,   # 生成200个决策树
                            algorithm="SAMME")   # 'SAMME'这个是针对离散的变量

    clf.fit(feature_train, target_train)

    # 模型测试
    predict_results = clf.predict(feature_test)
    print(accuracy_score(predict_results, target_test))
    conf_mat = confusion_matrix(target_test, predict_results)
    print(conf_mat)
    print(classification_report(target_test, predict_results))

    return clf

#========================================================
#  主程序
#========================================================

if __name__ == '__main__':

    model = BoostingMethod(X, y)

注意:Boosting有两种,一种是用于回归的AdaBoostRegressor,另一种是用于分类的AdaBoostClassifier。
https://blog.csdn.net/changzoe/article/details/78921624

相关文章

网友评论

      本文标题:机器学习中的集成方法(3)--Boosting(分步法)

      本文链接:https://www.haomeiwen.com/subject/yheptctx.html