决策树算法改进——集成学习

决策树算法改进——集成学习

1.集成学习定义

使用多种弱学习方法(即ID3算法,C4.5算法,CART算法)的组合,做多个分类模型,即多棵决策树(类比多专家投票),来获取比原方法更优的分类结果。

2.集成学习的具体分类

  • 装袋法
    n n n个样本中有放回抽取 m m m次70%的样本来训练(模拟多专家决策,学的知识不一样),提升分类结果。
    python实现袋装法,改进分类结果:
#sklearn库实现袋装法改进分类结果,并做袋装法和决策树算法效果对比
#加载库函数
import sklearn.datasets as datasets
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score#ensemble就是集成算法库
from sklearn.ensemble import BaggingClassifier #从库中加载袋装法函数
from sklearn.tree import DecisionTreeClassifier

#加载iris数据集
iris=datasets.load_iris()
X=iris.data
Y=iris.target

#分类器及交叉验证及训练结果
seed=42
kfold=KFold(n_splits=10,random_state=seed)#10折交叉验证
cart=DecisionTreeClassifier(criterion='gini',max_depth=2)#弱分类器是CART算法
cart=cart.fit(X,Y)
result=cross_val_score(cart,X,Y,cv=kfold)
print("决策树结果:",result.mean())
model=BaggingClassifier(base_estimator=cart,n_estimators=100,random_state=seed)
result=cross_val_score(model,X,Y,cv=kfold)
print("装袋法改进后结果:",result.mean())
  • 提升法(Boosting)
    提高树的学习的准确度,在训练过程中给每个样本一个权重,不断修改未被分类的样本的权重,提高学习速度。
    python实现提升法改进分类结果:
#sklearn库实现提升法改进分类结果,并做提升法和决策树算法效果对比
#加载库函数
import sklearn.datasets as datasets
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier #从库中加载提升法函数
from sklearn.tree import DecisionTreeClassifier

#加载数据集
dataset_all=datasets.load_breast_cancer()
X=dataset_all.data
Y=dataset_all.target

#分类器及交叉验证及训练结果
seed=42
kfold=KFold(n_splits=10,random_state=seed)#10折交叉验证
dtree=DecisionTreeClassifier(criterion='gini',max_depth=2)#弱分类器是CART算法
dtree=dtree.fit(X,Y)
result=cross_val_score(dtree,X,Y,cv=kfold)
print("决策树结果:",result.mean())
model=AdaBoostClassifier(base_estimator=dtree,n_estimators=100,random_state=seed)
result=cross_val_score(model,X,Y,cv=kfold)
print("提升法改进后结果:",result.mean())
  • 随机森林
    多次抽样,每次抽取的样本不一样,每次抽取的部分属性也不一样,随机性更强,对规律把握更全面。
    python实现随机森林样本抽取:
#python实现随机森林样本抽取
#加载库函数
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
import sklearn.datasets as datasets
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score#ensemble就是集成算法库
from sklearn.ensemble import RandomForestClassifier #从库中加载随机森林函数
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.tree import DecisionTreeClassifier
#随机森林抽取随机样本
X,Y=make_blobs(n_samples=1000,n_features=6,centers=50,random_state=0)
plt.scatter(X[:,0],X[:,1],c=Y)#画散点图,不同颜色代表不同样本
plt.show()

3.决策树的一些总结

  • 决策树的算法很多,但思路大致相同,找最重要的属性,进行分支,差别在决策树分支标准不一样,即衡量哪个属性比较重要的标准不一样。
  • 度量决策树好坏:准确率,精度,召回率,F1值,ROC曲线
  • 提高决策树分类效果:K折交叉校验,装袋法,提升法,随机森林
  • 机器学习最重要的是特征工程,特征就是最重要的属性,决策树就是一种特征获得的方法,决策树的作用有分类,找特征。(最重要属性)

你可能感兴趣的:(机器学习,算法)