sklearn--决策树和基于决策树的集成模型
一.决策树
决策树一般以选择属性的方式不同分为id3(信息增益),c4.5(信息增益率),CART(基尼系数),只能进行线性的分割,是一种贪婪的算法,其中sklearn中的决策树分为回归树和分类树两种,默认的是CART的决策树,下面介绍CART决策树
分支条件:二分类问题(只用来构建二叉树)
分支方法:对于连续特征的情况:比较阈值,高于某个阈值就属于某一类,低于某个阈值属于另一类。对于离散特征:抽取子特征,比如颜值这个特征,有帅、丑、中等三个水平,可以先分为帅和不帅的,不帅的里面再分成丑和中等的。
得分函数(y):分类树基尼系数的最小值得特征或是最终的叶节点分类结果,对于回归树取得是均值。
损失函数:其实这里的损失函数,就是分类的准则,也就是求最优化的准则
对于分类树(目标变量为离散变量):同一层所有分支假设函数的基尼系数的平均。
对于回归树(目标变量为连续变量):同一层所有分支假设函数的平方差损失
在二维空间(只有一个特征)其实对于回归树来说就是一个通过建立一个分段的平行线函数(一块接近的数据用他们的均值来代替)来逼近最后的目标值,而想通过这种方式来要得到要设置树的深度,但是书的深度很深的话就会使得模型有过拟合的风险
from sklearn.tree import DecisionTreeRegressor from sklearn.tree import DecisionTreeClassifier regr_2 = DecisionTreeRegressor(max_depth=5) regr_1 = DecisionTreeClassifierr(max_depth=5) regr_2.fit(X, y) regr_1.fit(X, y)
二.随机森林
我们通过随机的抽取部分样本,抽取部分的特征,来训练多颗决策树,然后通过投票表决的方式来决定最终的分类(这是分类问题,若是回归问题则是取最后结果的均值)在森林中每一棵树都有平等的发言权,这种随机深林是基于bagging的集成学习的方法,极大可能的过滤掉特征的误差和样本可能存在的误差.这里我们要注意的是:如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的,随机森林分类效果(错误率)与两个因素有关:
- 森林中任意两棵树的相关性:相关性越大,错误率越大;
- 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。
我们可以通过oob来衡量随机森林的好坏
from sklearn.ensemble import RandomForestClassifier rf0 = RandomForestClassifier(oob_score=True, random_state=10) rf0.fit(X,y) print rf0.oob_score_
三.adaboost+决策树
自适应boost,思想是每一次选取误差最小的模型,然后将错误的值权值加重,输入给下一个模型,如果错误率越高其相应的模型权值就会变低
#设定弱分类器CART weakClassifier=DecisionTreeClassifier(max_depth=1) #构建模型。 clf=AdaBoostClassifier(base_estimator=weakClassifier,algorithm='SAMME',n_estimators=300,learning_rate=0.8) clf.fit(X, y)
四.GBDT(梯度提升决策树)
https://blog.csdn.net/qq_22238533/article/details/79199605 gbdt的一些讲解,
五.XGBOOST