文章标题

来源:互联网 发布:手机修改mac地址软件 编辑:程序博客网 时间:2024/06/07 09:16

决策树学习


参考文献:李航《统计学习方法》,sklearn官方文档

决策树介绍

决策树是一种监督学习算法,可以用来解决分类和回归的问题。适合处理一些离散的属性,对于一些连续的属性可以通过分割来进行离散化。输出也是一些离散的值。

决策树的学习算法包括三个部分:特征选择,树的生成和树的剪枝。常用的算法ID3, C4.5和CART

特征选择:特征选择的目的在于寻找对训练数据能够分类的特征。
特征选择的关键在于准则。常用的准则有:信息增益,信息增益比,基尼系数

决策树生成:首先选用某种准则用来进行特征选择。根据该准则,选取进行分类的某个特征,根据选取的特征划分数据集。然后在划分后的数据集中递归的使用该方法,从而产生决策树。

树的剪枝:生成的决策树可能存在过拟合问题,需要对它进行剪枝。首先构造决策树的损失函数,然后通过最小化损失函数来进行剪枝。

sklearn包中的决策树使用

在强大的机器学习库sklearn中已经集成了决策树模型,所以我们可以利用该模块方便的实施决策树学习。下面介绍一些常用的方法:

class sklearn.tree.DecisionTreeClassifier ( criterion=’gini’ , splitter=’best’ , max_depth=None , min_samples_split=2 , min_samples_leaf=1 , max_features=None , random_state=None , min_density=None , compute_importances=None , max_leaf_nodes=None )

在创建一个决策树分类器时,我们有很多参数可以初始化,其中主要需要考虑的是:

  • criterion :规定了该决策树所采用的的最佳分割属性的判决方法,有两种:“gini”,“entropy”。

  • max_depth :限定了决策树的最大深度,对于防止过拟合非常有用。

  • min_samples_leaf :限定了叶子节点包含的最小样本数,这个属性对于防止上文讲到的数据碎片问题很有作用。

模块中一些重要的属性方法:

  • n_classes _ :决策树中的类数量。

  • classes_ :返回决策树中的所有种类标签。

  • feature_importances_ :feature的重要性,值越大那么越重要。

  • fit ( X , y , sample_mask=None , X_argsorted=None , check_input=True , sample_weight=None )

将数据集x,和标签集y送入分类器进行训练,这里要注意一个参数是:sample_weright,它和样本的数量一样长,所携带的是每个样本的权重。

  • get_params ( deep=True ) 得到决策树的各个参数。

  • set_params ( **params ) 调整决策树的各个参数。

  • predict ( X ) 送入样本X,得到决策树的预测。可以同时送入多个样本。

  • transform ( X , threshold=None ) 返回X的较重要的一些feature,相当于裁剪数据。

  • score ( X , y , sample_weight=None ) 返回在数据集X,y上的测试分数,正确率。

下面是一个应用的例子:

from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
clf.predict([[2., 2.]])

可视化

利用python中的pydot模块可以方便的输出决策树的效果图,不过需要注意的是pyparsing必须是旧版本的,比如1.5,另外需要在电脑商安装 Graphviz软件。下面是一个例子:

from sklearn.externals.six import StringIO
import pydot
dot_data = StringIO.StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf(“iris.pdf”)

sklearn决策树使用建议

Decision trees tend to overfit on data with a large number of features. Getting the right ratio of samples to number of features is important, since a tree with few samples in high dimensional space is very likely to overfit.

对于特征很多但样本很少的数据,决策树很容易导致过拟合,对特征进行采样很重要。

Consider performing dimensionality reduction (PCA, ICA, or Feature selection) beforehand to give your tree a better chance of finding features that are discriminative.

事先考虑采用PCA,ICA,特征选择来发现区分度比较高的特征

Visualise your tree as you are training by using the export function. Use max_depth=3 as an initial tree depth to get a feel for how the tree is fitting to your data, and then increase the depth.

采用export方法可视化决策树,刚开始构建决策树时, 使用max_depth =3得到一个较低的树,然后感觉一下数据和决策树是否匹配,然后逐渐增高。
使用max_depth 来防止过度拟合

Use min_samples_split or min_samples_leaf to control the number of samples at a leaf node. A very small number will usually mean the tree will overfit, whereas a large number will prevent the tree from learning the data. Try min_samples_leaf=5 as an initial value.

使用min_samples_split 和 min_samples_leaf 来控制叶子节点的样本数。叶节点样本数量过小往往意味着过拟合。 然而样本数量过大又会导致无法从数据中发现有用信息。

Balance your dataset before training to prevent the tree from being biased toward the classes that are dominant.

容易被类别中占多数的类影响而产生bias,所以推荐在送入算法之间先平衡下数据中各个类别所占的比例

All decision trees use np.float32 arrays internally.

所有的树都采用np.float32数组

0 0
原创粉丝点击