码迷,mamicode.com
首页 > 其他好文 > 详细

用决策树(CART)解决iris分类问题

时间:2018-06-10 11:40:32      阅读:924      评论:0      收藏:0      [点我收藏+]

标签:执行   targe   技术分享   python   属性   宽度   特征   最大   image   

首先先看Iris数据集

Sepal.Length——花萼长度 Sepal.Width——花萼宽度

Petal.Length——花瓣长度 Petal.Width——花瓣宽度

通过上述4中属性可以预测花卉属于Setosa,Versicolour,Virginica 三个种类中的哪一类

决策树 by CART

决策树有挺多种,这里讲下CART

CART的执行过程是这样的:

  1. 用特征值k和下限tk二分子集
  2. 不断二分,直到到达最大深度或者划分不能再减少不纯度为止

这一下sklearn都会自动帮我们完成,我们调用就行了

如何避免过拟合问题

减小最大深度等等

一个tip:

? min_* 的调大

? max_*的调小

? 就是DecisionTreeClassifier里面的参数,具体看文档_(:з」∠)_

损失函数的比较

sklearn提供了两种损失函数gini和entropy

gini是通过计算每个节点的不纯度,具体公式如下↓

\(J(k,t_k) = \frac{m_{left}}{m}G_{left} + \frac{m_{right}}{m}G_{right}\)

entropy在这里就不再赘述了

sklearn默认的是调用gini,因为gini的速度会快点,而且两者最后的效果是差不多的,真要比的话entropy产生的决策树会更平衡点

接下来我们来看代码

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import numpy as np

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target     #目标值

tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42) #定义最大深度和确定随机种子
tree_clf.fit(X, y)  #训练
print(tree_clf.predict_proba([[5, 1.5]]))   #预测返回的是可能性

#以上代码运行后将会产生如下输出 [[ 0.          0.90740741  0.09259259]]
#分别代表属于每一种类别可能的概率
#也可以用如下代码
print(tree_clf.predict[[5,1.5]])    #直接输出属于哪一类

看下上面生成的决策树的样子

技术分享图片

注:

? valuse是它划分到各个类的数量

? samples 指的是当前节点的数据个数

? 从左表橙色的点可以看出,gini=0意味着划分到了相同的类别里面

ps.以上代码及图片来自《Hands-On Machine Learning with Scikit-Learn》一书

如需转载请注明出处

**喜欢要不支持下_(:з」∠)_**

用决策树(CART)解决iris分类问题

标签:执行   targe   技术分享   python   属性   宽度   特征   最大   image   

原文地址:https://www.cnblogs.com/MartinLwx/p/9162300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!