文章标题
来源:互联网 发布:手机修改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数组
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- python中文乱码
- 全面剖析CSS Position定位
- JavaScript中闭包解析
- day03 dom操作
- Linux下jhead简介以及使用
- 文章标题
- Spring JdbcTemplate基础学习
- vs2012下配置MPI并行程序库
- session和cookie的区别
- java基础--Class.forName()、Class.forName().newInstance() 、New 三者区别!
- 淘宝notify-消息中间件(1)
- Js解析多重Json
- jz2440(mini2440)led驱动测试过程(环境搭建d)
- LintCode:快乐数