西瓜书——决策树

 

决策树(DT)是用于分类回归的非参数监督学习方法。目标是创建一个模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。

例如,在下面的示例中,决策树从数据中学习以使用一组if-then-else决策规则来近似正弦曲线。树越深,决策规则越复杂,模型越适合。

../_images/sphx_glr_plot_tree_regression_0011.png

决策树的一些优点是:

  • 易于理解和解释。树木可以看到。
  • 需要很少的数据准备。其他技术通常需要数据规范化,需要创建虚拟变量并删除空值。但请注意,此模块不支持缺失值。
  • 使用树的成本(即,预测数据)是用于训练树的数据点的数量的对数。
  • 能够处理数字和分类数据。其他技术通常专门用于分析仅具有一种变量类型的数据集。有关更多信息,请参阅算法
  • 能够处理多输出问题。
  • 使用白盒模型。如果在模型中可以观察到给定的情况,则可以通过布尔逻辑轻松解释条件。相反,在黑盒模型中(例如,在人工神经网络中),结果可能更难以解释。
  • 可以使用统计测试验证模型。这使得可以考虑模型的可靠性。
  • 即使其假设在某种程度上违反了生成数据的真实模型,也表现良好。

决策树的缺点包括:

  • 决策树学习者可以创建过于复杂的树,这些树不能很好地推广数据。这称为过度拟合。修剪(当前不支持),设置叶节点所需的最小样本数或设置树的最大深度等机制是避免此问题所必需的。
  • 决策树可能不稳定,因为数据中的小变化可能导致生成完全不同的树。通过在集合内使用决策树来减轻此问题。
  • 已知在最优性的几个方面甚至对于简单的概念,学习最优决策树的问题是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如贪婪算法,其中在每个节点处进行局部最优决策。这种算法不能保证返回全局最优决策树。这可以通过在集合学习器中训练多个树来减轻,其中特征和样本随替换而随机采样。
  • 有些概念很难学习,因为决策树不容易表达它们,例如XOR,奇偶校验或多路复用器问题。
  • 如果某些类占主导地位,决策树学习者会创建偏向的树。因此,建议在拟合决策树之前平衡数据集。
#coding:utf-8
from sklearn import  tree
import graphviz
X=[[0,0],[1,1]]
Y=[0,1]
'''
(criterion='gini', splitter='best', max_depth=None, min_samples_split=2,
min_samples_leaf =1, min_weight_fraction_leaf=0.0, max_features=None, 
random_state=None, max_leaf_nodes=None,class_weight=None, presort=False)

criterion='gini'是默认的,也可以是entropy
splitter 默认是best,最好的分类,也可以是随机分类random
max_features=int,float,string,or none
max_depth:int or none,表示树的最大深度,如果是"None",则节点会一直扩展直到所有的叶子都是纯的
或者所有的叶子节点都包含少于min_samples_split个样本点。忽视max_leaf_nodes是不是为None。
min_samples_split:int,float,可选(默认为2)
区分一个内部节点需要的最少的样本数。    
1.如果是int,将其最为最小的样本数。
2.如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是
每个分类需要的样本数。ceil是取大于或等于指定表达式的最小整数。
min_samples_leaf:int,float,可选(默认为1)
一个叶节点所需要的最小样本数:
1.如果是int,则其为最小样本数
2.如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。
min_weight_fraction_leaf:float,可选(默认为0)
一个叶节点的输入样本所需要的最小的加权分数。
min_weight_fraction_leaf:float,可选(默认为0)
一个叶节点的输入样本所需要的最小的加权分数。
max_leaf_nodes:int,None 可选(默认为None)
在最优方法中使用max_leaf_nodes构建一个树。最好的节点是在杂质相对减少。
如果是None则对叶节点的数目没有限制。如果不是None则不考虑max_depth.
random_state:int,RandomState instance or None
如果是int,random_state 是随机数字发生器的种子;
如果是RandomState,random_state是随机数字发生器,如果是None,
随机数字发生器是np.random使用的RandomState instance.
persort:bool,可选(默认为False)
是否预分类数据以加速训练时最好分类的查找。在有大数据集的决策树中,
如果设为true可能会减慢训练的过程。当使用一个小数据集或者一个深度受限的决策树中,
可以减速训练的过程。
'''
clf=tree.DecisionTreeClassifier()
clf=clf.fit(X,Y)
print(clf.predict([[2,2]]))

from sklearn.datasets import load_iris
iris=load_iris()
clf=tree.DecisionTreeClassifier()
clf=clf.fit(iris.data,iris.target)
dot_data=tree.export_graphviz(clf,out_file=None)
graph=graphviz.Source(dot_data)
#graph.render("iris")

dot_data = tree.export_graphviz(clf, out_file=None,
                     feature_names=iris.feature_names,
                     class_names=iris.target_names,
                     filled=True, rounded=True,
                     special_characters=True)
graph = graphviz.Source(dot_data)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值