机器学习实战2-决策树算法

文章目录回归树 交叉验证 sin函数模拟实例(回归树)案例:泰坦尼克号幸存者的预测 网格搜索
开发环境是: lab需要的库可以自行百度安装决策树算法核心是要解决两个的关键问题
1、如何从数据表中照出最佳节点和最佳分支
2、如何让决策树停止生长防止过拟合
就是说假如我有一张数据表,数据表中有成千上万个特征,我要把他们都提问完吗?
中的决策树模型
本文主要是学习分类树和回归树
建模步骤
from sklearn import treeclf = tree.DecisionTreeClassifier()clf = clf.fit(x_train, y_train)result = clf.score(x_test, y_test)
分类树
为了将表格转化为一棵树,决策树需要找到最佳节点和最佳分支方法,对于分类数来说衡量最佳的方法是叫做不纯度,通常来说不纯度越低,决策树对训练集的拟合效果越好,所有的决策树算法都是将和不纯度相关的某个属性最优化,不管我们用那个算法,都是追求的与不纯度相关的指标最优化
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定低于父节点的不纯度,在一棵决策树上叶子节点的不纯度一定是最低的
这个参数就是用来决定不纯度计算方法的,中提供了两种方法
一种是输入“”,使用信息熵
一种是输入"gini",使用基尼系数
我们无法干扰信息熵和基尼系数的计算,所以这里我们知道怎么算的即可,中的方法我们是无法干扰的
相比于基尼系数来说,信息熵对于不纯度更加敏感,对不纯度的更强,但在实际使用中两者的效果差不多,信息熵的计算相比于基尼系数会慢一点,因为基尼系数没有对数运算,因为信息熵对于不纯度更加敏感,所以信息熵在计算决策树时候会更加仔细,所以对于高维数据或者噪音很多的数据来说很容易过拟合
关于参数如何选择
我们可以看到我们的决策树中并没有用到我们所给的所有属性
clf = tree.DecisionTreeClassifier(criterion = "entropy", random_state=30)clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest) # 返回预测的准确度accuracyscore
&&
用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表现更明显,低维度数据几乎不会显现,我们任意给一个数值可以让模型稳定下来
决策树是随机的
也是用来控制决策树中随机选项的可以输入best,决策树虽然分支时会随机但会有限选择更重要的特征进行分支,输入分支时会更加随机,树会更深,拟合将会降低,这也是防止过拟合的一种方法
【机器学习实战2-决策树算法】clf = tree.DecisionTreeClassifier(criterion = "entropy", splitter="best")clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest) # 返回预测的准确度accuracscore
剪枝参数
在不加限制的情况下,一颗决策树会生长到衡量不纯度的指标最优,或没有更多的特征可用停止,这样的决策树往往会过拟合,也就是说他会在训练集上表现很好,在测试集上表现却很糟糕
score = clf.score(Xtrain, Ytrain)score
我们要分清楚过拟合的概念,过拟合,也就是说他会在训练集上表现很好,在测试集上表现却很糟糕,但如果我们在训练集和测试集上的表现效果都很好的话不能称为过拟合
剪枝策略对于决策树的影响巨大,正确的剪枝策略是决策树优化的核心
限制树的最大深度,超过设定深度的树枝全部剪掉