Decision Trees 决策树

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.]])

Examples:

未完待续。。。

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

时间: 2024-08-01 01:13:50

Decision Trees 决策树的相关文章

机器学习实践 学习笔记3 decision trees

决策树(decision trees) 工作原理: 决策树属于监督类型的算法,同样,我们有数据集,知道每一条数据的分类.然后我们按照某种规则,选取数据集上的特征作为分割点,把数据集进行划分.循环重复以上动作,直至所有数据集各自的分类都是唯一的,或者所有特征已经被选择无法再进行划分.使用何种规则进行特征的选取下文将会叙述. 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 伪代码: CreateB

Logistic Regression Vs Decision Trees Vs SVM: Part I

Classification is one of the major problems that we solve while working on standard business problems across industries. In this article we’ll be discussing the major three of the many techniques used for the same, Logistic Regression, Decision Trees

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 Vs SVM: Part I In this part we’ll discuss how to choose between Logistic Regression , Decision Trees and Support Vector Machines. The most correct ans

What are the advantages of logistic regression over decision trees?FAQ

What are the advantages of logistic regression over decision trees?FAQ The answer to "Should I ever use learning algorithm (a) over learning algorithm (b)" will pretty much always be yes. Different learning algorithms make different assumptions

Parallel Gradient Boosting Decision Trees

本文转载自:链接 Highlights Three different methods for parallel gradient boosting decision trees. My algorithm and implementation is competitve with (and in many cases better than) the implementation in OpenCV and XGBoost (A parallel GBDT library with 750+

8.4.1 决策树(Decision trees)

决策树是机器学习中最流行的一种算法,可以用于根据数据作出决策,或把输入划分为不同的类别.算法使用树描述数据的哪些属性应进行测试,对每个可能的答案决定做什么.对答案反应既可能是另一个测试,也可能是最终答案. 机器学习理论提供了复杂的方法,用于自动从数据生成树,但对于我们的示例,我们将手工创建树.图 8.3 显示了我们问题的决策树. 图 8.3 检查适合贷款的决策树:每个菱形代表问题,链接是通向另一个问题或结论(矩形)的可能答案. 我们将首先实现 F# 版本.在 F# 中,写代码通常很容易,如果我们

决策树(Decision Trees)

原文地址:https://www.cnblogs.com/LUOyaXIONG/p/10705304.html

Decision trees

决策树有着非常广泛的应用,可以用于分类和回归问题.以下针对分类问题对决策树进行分析. 分类情况下,可以处理离散(if-then)的特征空间,也可以是连续(阈值化的if-than)的特征空间. 决策树由结点和边构成,其中结点分内结点(属性,特征)和外结点(类别).边上代表着判别的规则,即if-then规则--Splitting datasets one feature at a time. 思想,决策树的每个分枝根据边代表的属性利用if-then规则将特征分类,直至获得分类的结果. 决策树的训练属

OpenCV码源笔记——Decision Tree决策树

来自OpenCV2.3.1 sample/c/mushroom.cpp 1.首先读入agaricus-lepiota.data的训练样本. 样本中第一项是e或p代表有毒或无毒的标志位:其他是特征,可以把每个样本看做一个特征向量: cvSeqPush( seq, el_ptr );读入序列seq中,每一项都存储一个样本即特征向量: 之后,把特征向量与标志位分别读入CvMat* data与CvMat* reponses中 还有一个CvMat* missing保留丢失位当前小于0位置: 2.训练样本