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

例如,在下面的例子中,决策树从数据中学习用一组if-then-else决策规则逼近正弦曲线。 树越深,决策规则越复杂,模型也越复杂。

决策树的优点:

  • 易于理解和解释。树可以被可视化。
  • 需要很少的数据准备。其他技术通常需要数据标准化,需要创建虚拟变量,并删除空白值。但请注意,该模块不支持缺少的值
  • 使用树(即,预测数据)的成本在用于训练树的数据点的数量上是对数级别的。
  • 能够处理数字和分类数据。其他技术通常专门用于分析只有一种变量的数据集。查看更多信息的算法。
  • 能够处理多输出问题
  • 使用白盒模型。如果一个给定的情况在一个模型中是可观察的,那么这个条件的解释可以用布尔逻辑来解释。相反,在黑盒模型(例如,在人造神经网络中),结果可能更难以解释。
  • 可以使用统计测试来验证模型。这可以说明模型的可靠性
  • 即使其假设受到数据生成的真实模型的某些违反,也能很好地执行。

决策树的缺点:

  • 决策树学习者可以创建过于复杂的树,不能很好地概括数据。这被称为过度拟合。修剪(目前不支持)等机制,设置叶节点所需的最小样本数或设置树的最大深度是避免此问题所必需的。
  • 决策树可能是不稳定的,因为数据的小变化可能导致生成完全不同的树。通过在集合(ensemble)中使用决策树可以缓解这个问题。
  • 学习最优决策树的问题在最优化的几个方面甚至简单的概念上都被认为是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如在每个节点处进行局部最优决策的贪婪算法。这样的算法不能保证返回全局最优的决策树。这可以通过在集合学习器(ensemble learner)中训练多个树来减轻,其中特征和样本随机地被替换
  • 有些概念很难学,因为决策树不能很容易地表达它们,比如XOR奇偶校验或多路复用器问题。
  • 决策树学习者如果某些类占主导地位,就会创建偏向性树。因此建议在拟合决策树之前平衡数据集

Classification

DecisionTreeClassifier是一个能够对数据集进行多类分类的类。

与其他分类器一样,DecisionTreeClassifier采用两个数组作为输入:保存训练样本的大小为[n_samples,n_features]的稀疏密集数组X,以及保存类标签整数值数组Y [n_samples] 训练样本:

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

经过拟合后,模型可以用来预测样本的类别:

>>> clf.predict([[2., 2.]])
array([1])

或者,可以预测每个类的概率,这是叶子节点中同一类的训练样本的比值

>>> clf.predict_proba([[2., 2.]]) 
array([[ 0., 1.]])

DecisionTreeClassifier具有二进制(其中标签是[-1,1])分类和多类(其中标签是[0,...,K-1])分类的能力。

使用Iris数据集,我们可以构建一棵树,如下所示:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> iris = load_iris()
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(iris.data, iris.target)

一旦训练完成,我们可以使用export_graphviz导出器以Graphviz格式导出树。 如果您使用conda软件包管理器,则可以使用graphviz二进制文件和python软件包进行安装

conda install python-graphviz

或者,可以从graphviz项目主页下载graphviz的二进制文件,并使用pip安装graphviz从pypi安装Python包装程序。

下面是在整个Iris数据集上训练的上述树的graphviz输出示例; 结果保存在一个输出文件iris.pdf中:

>>> import graphviz
>>> dot_data = tree.export_graphviz(clf, out_file=None)
>>> graph = graphviz.Source(dot_data)
>>> graph.render("iris")

export_graphviz导出器还支持各种美观的选项,包括按类别(或回归值)着色节点,并根据需要使用显式变量和类名称。 Jupyter笔记本也自动内联这些图。

>>> 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)
>>> graph

经过拟合后,模型可以用来预测样本的类别

>>> clf.predict(iris.data[:1, :])
array([0])

或者,可以预测每个类的概率,这是叶子节点中同一类的训练样本的比值

>>> clf.predict_proba([[2., 2.]]) 
array([[ 0., 1.]])

实际使用中的Tips:

  • 决策树倾向于过度拟合具有大量特征的数据。获得正确的样本数与特征数之间的比例是重要的,因为在高维空间中具有很少样本的树很可能过度拟合。
  • 考虑预先执行降维PCAICA, or Feature selection),以使您的树更有可能找到具有区分性的特征。
  • 通过使用export function来训练您正在训练的树。使用max_depth = 3作为初始树深度,以了解树如何适合您的数据,然后增加深度
  • 请记住,填充树所需的样本数是树增长的每个附加等级的两倍(原话:number of samples required to populate the tree doubles for each additional level the tree grows to。使用max_depth来控制树的大小以防止过度拟合
  • 使用min_samples_split或min_samples_leaf来控制叶节点处的采样数量。一个非常小的数字通常意味着树会过度拟合,而的数值将阻止树学习数据。尝试min_samples_leaf = 5作为初始值。如果样本量变化很大,则可以使用浮点数作为这两个参数的百分比。两者之间的主要区别在于,min_samples_leaf保证叶子中的样本数量最小,而min_samples_split可以创建任意的小叶子,尽管min_samples_split在文献中更为常见。
  • 在训练之前平衡你的数据集,以防止树偏向占优势的类。类平衡可以通过从每个类中采样相同数量的样本来完成,或者优选地通过将每个类的样本权重的总和(sample_weight)归一化为相同的值来完成。还要注意,像min_weight_fraction_leaf这样的基于权重的预剪枝标准将不会比不知道样本权重的标准(如min_samples_leaf)偏向于显性类。
  • 如果样本被加权,使用基于权重的预剪枝准则(如min_weight_fraction_leaf)可以更容易地优化树结构,从而确保叶节点至少包含样本权重总和的一小部分。
  • 所有决策树都在内部使用np.float32数组。如果训练数据不是这种格式,将会创建一个数据集的副本。
  • 如果输入矩阵X非常稀疏,则建议在调用预测之前将其转换为稀疏csc_matrix,然后稀疏csr_matrix。对于稀疏矩阵输入,相比于密集矩阵,当特征在大多数采样中具有零值时,训练时间可以快几个数量级。

未完待续。。。

详见:http://scikit-learn.org/stable/modules/tree.html

Decision Trees 决策树的更多相关文章

  1. Decision trees决策树

    信息熵(entropy) 信息熵模型(香农Shannon's Entropy Model) 在一个随机事件中,某个事件发生的不确定度越大,熵也就越大,那我们要搞清楚所需要的信息量越 信息增益(IG,I ...

  2. 海量数据挖掘MMDS week6: 决策树Decision Trees

    http://blog.csdn.net/pipisorry/article/details/49445465 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  3. Facebook Gradient boosting 梯度提升 separate the positive and negative labeled points using a single line 梯度提升决策树 Gradient Boosted Decision Trees (GBDT)

    https://www.quora.com/Why-do-people-use-gradient-boosted-decision-trees-to-do-feature-transform Why ...

  4. CatBoost使用GPU实现决策树的快速梯度提升CatBoost Enables Fast Gradient Boosting on Decision Trees Using GPUs

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  5. Logistic Regression vs Decision Trees vs SVM: Part II

    This is the 2nd part of the series. Read the first part here: Logistic Regression Vs Decision Trees ...

  6. Logistic Regression Vs Decision Trees Vs SVM: Part I

    Classification is one of the major problems that we solve while working on standard business problem ...

  7. 机器学习算法 --- Pruning (decision trees) & Random Forest Algorithm

    一.Table for Content 在之前的文章中我们介绍了Decision Trees Agorithms,然而这个学习算法有一个很大的弊端,就是很容易出现Overfitting,为了解决此问题 ...

  8. 机器学习算法 --- Decision Trees Algorithms

    一.Decision Trees Agorithms的简介 决策树算法(Decision Trees Agorithms),是如今最流行的机器学习算法之一,它即能做分类又做回归(不像之前介绍的其他学习 ...

  9. Machine Learning Methods: Decision trees and forests

    Machine Learning Methods: Decision trees and forests This post contains our crib notes on the basics ...

随机推荐

  1. 高级软件测试技术-任务进度-Day03

    任务进度11-15 使用工具 Jira 小组成员 华同学.郭同学.穆同学.沈同学.覃同学.刘同学 任务进度 经过了前两天的学习任务的安排,以下是大家的任务进度: 穆同学(任务1) 1.今天就接着昨天的 ...

  2. Cordova-在现有iOS工程自动化接入Cordova插件

    模拟Cordova插件命令 自己编写脚本,了解cordova添加插件做了哪些事情. 上一篇文章了解到,web与native的交互主要是cordova.js中的exec方法调用,触发交互事件.UIWeb ...

  3. UNITY ET 框架

    GITHUB上近3000星的开源框架,包括了服务器客户端,IL RUNTIME热等特点,对于新项目,值得拥有

  4. DAY 7 上午

    一些图论的题目 BZOJ 3445 Roadblock 求出最短路,枚举每条边再跑一遍即可(科技为了我 代码: #include<bits/stdc++.h> using namespac ...

  5. org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping clas

    在Hibernate中使用annotation出现错误.如题目所示. HibernateSessionFactory类中: //    private  static Configuration co ...

  6. python插件快速安装

    windows下安装python插件没有linux那样方便. 可以先安装easy_install.我的是win64  下载地址  直接下载py文件运行,将对应目录添加到环境变量,我的是D:\dev_t ...

  7. Linux_OpenSSH远程连接

    目录 目录 SSH server SSH服务属性 SSH协议执行原理 SSH连接方式 ssh Commands scp commands sftp commands SSH在生产环境中的使用 系统间备 ...

  8. ArchLinux下XFCE的一个问题修复:thunar加载的环境变量不正确

    家里的电脑上,安装了Arch32与Arch64.不记得以前做过什么操作, 导致在Arch32下,Thunar启动后,其环境变量缺失很多内容. 主要在PATH及LD_LIBRARY_PATH几个关键变量 ...

  9. 使用TestNG框架测试用例执行顺序问题

    既然是讨论执行顺序问题,那么用例肯定是批量执行的,批量执行的方法有mvn test.直接运行testng.xml文件,其中直接运行testng.xml文件的效果与pom文件中配置执行testng.xm ...

  10. 【MM系列】SAP MM模块-BAPI:BAPI_GOODSMVT_CREATE的CODE分析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-BAPI:BAPI ...