决策树在sklearn
中的实现
一、sklearn
scikit
-learn是一个开源的基于python语言的机器学习工具包,通过Numpy
,Scipy
,matplotlib
等python
数值计算的库实现高效的算法应用,并且涵盖了几乎所有主流的机器学习算法。
二、决策树
1、决策树概述
决策树(Decision tree
)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并且用树状图来呈现这些规则,以解决分类和回归问题。
2、决策树工作原理
不断的对某条数据的特征进行提问,直至得到最后的分类,即标签。
但在不加限制的情况下,一颗决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止,这样往往会过拟合,就是在训练集的表线上非常良好,但是在测试集上的表现很糟糕。为了让决策树有更好的泛化性,要对决策树进行剪枝。
3、决策树算法的核心–如何找到最优的树
(1)、如何从数据表中找到最佳节点和最佳分枝。
(2)、如何让决策树停止生长,防止过拟合。
由于最优的节点不一定能够生成最优的树,故sklearn
建立了多棵树,从多棵树中选取最优的树。故每次选取特征时是随机选取一部分特征。
4、sklearn
中的决策树
模块sklearn.tree
,该模块总共包含了五个类
类 | 类名 |
---|---|
tree.DecisionTreeRegressor | 回归树 |
tree.DecisionTreeclassfier | 分类树 |
tree.export_graphviz | 将生成的决策树导出为DOT格式,画图专用 |
tree.ExtraTreeclassfier | 高随机版本的分类树 |
tree.ExtraTreeRegressor | 高随机版本的回归树 |
5、sklearn
建模基本流程及代码
(1)、实例化,建立评估模型对象
from sklearn import tree
clf=tree.DecisionTreeClassifier() #将类实例化
(2)、通过模型接口训练模型
clf=clf.fit(Xtrain,Ytrain) #使用训练集数据训练模型
(3)、通过模型接口提取需要的信息
score=clf.score(Xtest,Ytest) #导入测试集,获得模型的评分
6、重要参数
(1)、Criterion
:不纯度 衡量最佳节点和和最佳分支方法的参数。不纯度越低,决策树对训练集的拟合效果越好。
不纯度是基于节点来计算的,树中的每一个节点都会有一个不纯度,子节点的不纯度一定低于父节点的不纯度。
sklearn
中提供了两种方法。
1)、Criterion="entropy"
:使用信息熵,通常应用欠拟合的数据。
2)、Criterion="gini"
:使用基尼系数,通常应用于高维数据和噪音很多的数据,即容易过拟合的数据。
但是两者的差别不是绝对的,最好的办法是两种参数都试用,选取表现更好的参数。不填写默认gini
(2)、random_state
:设置分枝中随机模式的参数,默认为None。
(3)、splitter
:控制决策树中的随机选项
1)、splitter="best"
:优先选取更重要的特征进行分支。
2)、``splitter=“random”`:更加的随机。
(4)、max_depth
:限制树的最大深度,超过设定深度的树枝全部剪掉,当数据高维度低样本的时候效果较好
(5)、min_samples_leaf
:一个节点在分枝后的每个子节点必须包含至少min_sample_leaf
个训练样本,否则分枝就不会发生。参数设置不宜过大也不宜过小,一般是从5开始使用。
(6)、min_samples_split
:一个节点必须包含min_sample_split
个训练样本,这个节点才允许被分枝,否则不会发生。
(7)、max_features
:限制分支时考虑的特征个数,对于高维度的数据,该方法较暴力,降维最好使用PCA
,ICA
或者特征选择模块中的降维算法
(9)、min_impurity_decrease
:限制信息增益的大小,信息增益小于设定数值的分枝不会发生。
7、如何确定参数的取值最优
画学习曲线
8、重要接口
clf.apply(xtest) #返回测试样本所在的叶子节点的索引
clf.predict(xtest) # 返回每个测试样本的分类/回归结果