决策树通常以选择属性的方式不一样分为id3(信息增益),c4.5(信息增益率),CART(基尼系数),只能进行线性的分割,是一种贪婪的算法,其中sklearn中的决策树分为回归树和分类树两种,默认的是CART的决策树,下面介绍CART决策树python
分支条件:二分类问题(只用来构建二叉树)算法
分支方法:对于连续特征的状况:比较阈值,高于某个阈值就属于某一类,低于某个阈值属于另外一类。对于离散特征:抽取子特征,好比颜值这个特征,有帅、丑、中等三个水平,能够先分为帅和不帅的,不帅的里面再分红丑和中等的。dom
得分函数(y):分类树基尼系数的最小值得特征或是最终的叶节点分类结果,对于回归树取得是均值。函数
损失函数:其实这里的损失函数,就是分类的准则,也就是求最优化的准则学习
对于分类树(目标变量为离散变量):同一层全部分支假设函数的基尼系数的平均。优化
对于回归树(目标变量为连续变量):同一层全部分支假设函数的平方差损失spa
在二维空间(只有一个特征)其实对于回归树来讲就是一个经过创建一个分段的平行线函数(一块接近的数据用他们的均值来代替)来逼近最后的目标值,而想经过这种方式来要获得要设置树的深度,可是书的深度很深的话就会使得模型有过拟合的风险.net
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个特征中选择最优的,随机森林分类效果(错误率)与两个因素有关:rest
减少特征选择个数m,树的相关性和分类能力也会相应的下降;增大m,二者也会随之增大。因此关键问题是如何选择最优的m(或者是范围),这也是随机森林惟一的一个参数。blog
咱们能够经过oob来衡量随机森林的好坏
from sklearn.ensemble import RandomForestClassifier rf0 = RandomForestClassifier(oob_score=True, random_state=10) rf0.fit(X,y) print rf0.oob_score_
自适应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)
https://blog.csdn.net/qq_22238533/article/details/79199605 gbdt的一些讲解,