Scikit-learn之决策树

作者:章华燕 编辑:黄俊嘉

决策树在学习应用中非常有用,接下来给大家分享一下自己有关于决策树的一些想法!

决策树概述

决策树是一个非参数的监督式学习方法,主要用于分类和回归。算法的目标是通过推断数据特征,学习决策规则从而创建一个预测目标变量的模型。如下图所示,决策树通过一系列if-then-else 决策规则 近似估计一个正弦曲线。

决策树的优势

①简单易懂,原理清晰,决策树可以实现可视化;

②数据准备简单。其他的方法需要实现数据归一化,创建虚拟变量,删除空白变量;

③使用决策树的代价是数据点的对数级别;

④能够处理数值和分类数据;

⑤能够处理多路输出问题;

⑥使用白盒子模型(内部结构可以直接观测的模型)。一个给定的情况是可以观测的,那么就可以用布尔逻辑解释这个结果。相反,如果在一个黑盒模型(ANN),结果可能很难解释;

⑦可以通过统计学检验验证模型。这也使得模型的可靠性计算变得可能;

决策树的劣势

①可能会建立过于复杂的规则,即过拟合。为避免这个问题,剪枝、设置叶节点的最小样本数量、设置决策树的最大深度有时候是必要的;

②决策树有时候是不稳定的,因为数据微小的变动,可能生成完全不同的决策树。 可以通过总体平均(ensemble)减缓这个问题。应该指的是多次实验;

③学习最优决策树是一个NP完全问题。所以,实际决策树学习算法是基于试探性算法,例如在每个节点实现局部最优值的贪心算法。这样的算法是无法保证返回一个全局最优的决策树。可以通过随机选择特征和样本训练多个决策树来缓解这个问题;

④有些问题学习起来非常难,因为决策树很难表达。如:异或问题、奇偶校验或多路复用器问题;

⑤如果有些因素占据支配地位,决策树是有偏的。因此建议在拟合决策树之前先平衡数据的影响因子。

决策树分类

DecisionTreeClassifier 能够实现多类别的分类。输入两个向量:向量X,大小为[n_samples,n_features],用于记录训练样本;向量Y,大小为[n_samples],用于存储训练样本的类标签。

能够实现二进制分类和多分类。使用Isis数据集:

安装Graphviz将其添加到环境变量,使用dot创建一个PDF文件。dot -Tpdf iris.dot -o iris.pdf

如果安装了pydotplus,也可以在Python中直接生成:

可以根据不同的类别输出不同的颜色,也可以指定类别名字:

决策树回归

和分类不同的是向量y可以是浮点数:

本文前面提到的例子:

多输出问题

多输出问题时需要预测多个输出的监督式学习问题。即Y是一个2d的向量,大小为[n_samples, n_outputs]。当输出之间不相关时,一个简单的解决办法是建立n个独立模型。对于每一个输出,使用这些模型独立预测这每个输出。由于输出是和相同的输入相关的,所以一个更好的办法是建立一个能够持续预测所有输出的单一模型。首先,系统需要的训练时间更少了,因为只建立了一个模型。其次准确性也会得到提高。

决策树的策略需要修改以支持多分类问题:

①叶子上存储n个输出变量;

②使用不同的标准计算所有n输出的平均减少。

这一节是关于 DecisionTreeClassifier 和DecisionTreeRegressor的一些知识点。如果一个决策树的输出向量Y大小为[n_samples, n_outputs],预测量有:

①predict:输出n个预测值

②predict_proba:输出有n个输出的向量组成的列表

原文发布于微信公众号 - 机器学习算法全栈工程师(Jeemy110)

原文发表时间:2017-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

【技术】SPSS因子分析

因子分析在各行各业的应用非常广泛,尤其是科研论文中因子分析更是频频出现。小兵也凑个热闹,参考《SPSS统计分析》书中的案例,运用SPSS进行因子分析,作为我博客...

1878
来自专栏应用案例

入门必看!一文读懂神经网络中的激活函数(二)

看看深度学习之激活函数 本篇接着上一篇推文入门《必看!从零开始了解到训练神经网络(一)》,在介绍完神经网络的基本原理和结构之后,继续介绍神经网络中的关键之一 —...

26010
来自专栏开心的学习之路

神经网络体系搭建(一)——神经网络

本篇是神经网络体系搭建的第一篇,解决体系搭建的前四个问题,详见神经网络体系搭建(序) 神经网络 ? 最简单的神经网络 神经网络的定义就不再赘述,直接从最简单的神...

31410
来自专栏AI科技评论

学界 | OpenAI 研究线性网络的非线性行为,数值计算的玄机带来全新的网络表现

AI 科技评论按:不管是一般的编程还是机器学习,凡是计算机中的数据都是以一定的数据格式表示的。但有些情况下数据格式会带来明显的限制,造成计算结果的异常。 不过在...

2738
来自专栏新智元

深度线性神经网络也能做非线性计算,OpenAI使用进化策略新发现

【新智元导读】OpenAI研究人员Jakob Foerster在OpenAI博客介绍了一个很有趣的实验,他们发现线性神经网络中的浮点表示实际上在零附近有一个比较...

2757
来自专栏SIGAI学习与实践平台

卷积神经网络的压缩和加速

我们先来看看当前深度学习平台中,卷积层的实现方式,其实当前所有的深度学习平台中,都是以矩阵乘法的方式实现卷积的(如图1左侧):

2978
来自专栏人工智能的秘密

4种普遍的机器学习分类算法

本文主要介绍了 4 种应用比较普遍的的机器学习算法,但是机器学习算法还有其他很多不同的算法,大家感兴趣的可以自己去了解。

1930
来自专栏算法channel

机器学习高斯混合模型(后篇):GMM求解完整代码实现

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

3575
来自专栏磐创AI技术团队的专栏

一个完整的机器学习项目在Python中的演练(三)

1041
来自专栏大数据挖掘DT机器学习

数据挖掘算法-Matlab实现:Logistic 回归

什么叫做回归呢?举个例子,我们现在有一些数据点,然后我们打算用一条直线来对这些点进行拟合(该曲线称为最佳拟合曲线),这个拟合过程就被称为回归。 利用Logis...

2796

扫描关注云+社区