Scikit-learn之决策树

NDIS herman 690浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

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

决策树概述

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

决策树通过一系列if-then-else 决策规则

决策树的优势

  1. 简单易懂,原理清晰,决策树可以实现可视化;
  2. 数据准备简单。其他的方法需要实现数据归一化,创建虚拟变量,删除空白变量;
  3. 使用决策树的代价是数据点的对数级别;
  4. 能够处理数值和分类数据;
  5. 能够处理多路输出问题;
  6. 使用白盒子模型(内部结构可以直接观测的模型)。一个给定的情况是可以观测的,那么就可以用布尔逻辑解释这个结果。相反,如果在一个黑盒模型(ANN),结果可能很难解释;
  7. 可以通过统计学检验验证模型。这也使得模型的可靠性计算变得可能;

决策树的劣势

  1. 可能会建立过于复杂的规则,即过拟合。为避免这个问题,剪枝、设置叶节点的最小样本数量、设置决策树的最大深度有时候是必要的;
  2. 决策树有时候是不稳定的,因为数据微小的变动,可能生成完全不同的决策树。 可以通过总体平均(ensemble)减缓这个问题。应该指的是多次实验;
  3. 学习最优决策树是一个NP完全问题。所以,实际决策树学习算法是基于试探性算法,例如在每个节点实现局部最优值的贪心算法。这样的算法是无法保证返回一个全局最优的决策树。可以通过随机选择特
  4. 征和样本训练多个决策树来缓解这个问题;
  5. 有些问题学习起来非常难,因为决策树很难表达。如:异或问题、奇偶校验或多路复用器问题;
  6. 如果有些因素占据支配地位,决策树是有偏的。因此建议在拟合决策树之前先平衡数据的影响因子。

决策树分类

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

>>> from sklearn import tree
>>> X = [[0,0],[1,1]]
>>> Y = [0,1]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.ift(X,Y)
>>> clf.predict([[2.,2.]])
>>> clf.predict_prodb([[2.,2.]])

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

Isis数据集

安装Graphviz将其添加到环境变量

Scikit-learn之决策树

决策树回归

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

>>> from sklearn import tree
>>> X = [[0,0],[2,2]]
>>> Y = [0.5,2.5]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.ift(X,Y)
>>> clf.predict([[1,1]])

本文前面提到的例子:

决策树代码

多输出问题

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

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

  1. 叶子上存储n个输出变量;
  2. 使用不同的标准计算所有n输出的平均减少。

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

  1. predict:输出n个预测值
  2. predict_proba:输出有n个输出的向量组成的列表

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » Scikit-learn之决策树