sklearn CART决策树分类

决策树是一种常用的机器学习方法,可以用于分类和回归。同时,决策树的训练结果非常容易理解,而且对于数据预处理的要求也不是很高。

理论部分

比较经典的决策树是ID3、C4.5和CART,分别分析信息增益、增益率、基尼指数,总体思想是不断降低信息的不确定性,最后达到分类的目的。

这里介绍的CART(Classification And Regression Tree)决策树选用基尼指数(Gini Index)来依次选择划分属性

\[Gini(D)=\sum_{k=1}^{n} \sum_{k_1\not=k_2}p_{k_1}p_{k_2}=1-\sum_{j=1}^{n}p_j^2
\]

数据集的基尼指数越大,表示该数据集的信息量越大,可能性越多,越混乱;基尼指数越小,表示数据集越纯净。

属性a的基尼指数定义为

\[Gini\_index(D,a)=\sum_{v=1}^V\frac{|D^v|}{D}Gini(D^v)
\]

表示确定属性\(a\)等于某个\(v\)后,数据集基尼指数的加权平均。

每一轮求出各个属性的基尼指数,然后每次取最大属性的进行划分,这样总体信息的不确定性就会降低得最快。

决策树生成前后,为了防止过拟合,还要使用剪枝(pruning)操作,这里不再展开。

sklearn代码实现

#coding=utf-8

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import tree
import numpy as np
from sklearn.externals.six import StringIO
import pydot def main():
iris = datasets.load_iris() #典型分类数据模型
#这里我们数据统一用pandas处理
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['class'] = iris.target #这里只取两类
data = data[data['class']!=2]
#为了可视化方便,这里取两个属性为例
X = data[['sepal length (cm)','sepal width (cm)']]
Y = data[['class']]
#划分数据集
X_train, X_test, Y_train, Y_test =train_test_split(X, Y)
#创建决策树模型对象,默认为CART
dt = tree.DecisionTreeClassifier()
dt.fit(X_train, Y_train) #显示训练结果
print dt.score(X_test, Y_test) #score是指分类的正确率 #作图
h = 0.02
x_min, x_max = X.iloc[:, 0].min() - 1, X.iloc[:, 0].max() + 1
y_min, y_max = X.iloc[:, 1].min() - 1, X.iloc[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = dt.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired) #做出原来的散点图
class1_x = X.loc[Y['class']==0,'sepal length (cm)']
class1_y = X.loc[Y['class']==0,'sepal width (cm)']
l1 = plt.scatter(class1_x,class1_y,color='b',label=iris.target_names[0])
class1_x = X.loc[Y['class']==1,'sepal length (cm)']
class1_y = X.loc[Y['class']==1,'sepal width (cm)']
l2 = plt.scatter(class1_x,class1_y,color='r',label=iris.target_names[1])
plt.legend(handles = [l1, l2], loc = 'best') plt.grid(True)
plt.show()
#导出决策树的图片,需要配置graphviz,并且添加到环境变量
dot_data = StringIO()
tree.export_graphviz(dt, out_file=dot_data,feature_names=X.columns,
class_names=['healthy','infected'],
filled=True, rounded=True,
special_characters=True)
graph = pydot.graph_from_dot_data(dot_data.getvalue())[0]
graph.write_png("Iris.png") if __name__ == '__main__':
main()

测试结果

0.92

matlibplot显示

Iris.png

sklearn CART决策树分类的更多相关文章

  1. CART决策树(分类回归树)分析及应用建模

    一.CART决策树模型概述(Classification And Regression Trees)   决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...

  2. 实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类

    使用sklearn的决策树实现iris鸢尾花数据集的分类 要求: 建立分类模型,至少包含4个剪枝参数:max_depth.min_samples_leaf .min_samples_split.max ...

  3. 用Python开始机器学习(2:决策树分类算法)

    http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树 ...

  4. python 之 决策树分类算法

    发现帮助新手入门机器学习的一篇好文,首先感谢博主!:用Python开始机器学习(2:决策树分类算法) J. Ross Quinlan在1975提出将信息熵的概念引入决策树的构建,这就是鼎鼎大名的ID3 ...

  5. (数据科学学习手札23)决策树分类原理详解&Python与R实现

    作为机器学习中可解释性非常好的一种算法,决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方 ...

  6. 用cart(分类回归树)作为弱分类器实现adaboost

    在之前的决策树到集成学习里我们说了决策树和集成学习的基本概念(用了adaboost昨晚集成学习的例子),其后我们分别学习了决策树分类原理和adaboost原理和实现, 上两篇我们学习了cart(决策分 ...

  7. ID3、C4.5、CART决策树介绍

    决策树是一类常见的机器学习方法,它可以实现分类和回归任务.决策树同时也是随机森林的基本组成部分,后者是现今最强大的机器学习算法之一. 1. 简单了解决策树 举个例子,我们要对”这是好瓜吗?”这样的问题 ...

  8. CART决策树

     CART(Classification and Regression tree)分类回归树由L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出.ID3中根据属 ...

  9. ID3、C4.5和CART决策树对比

    ID3决策树:利用信息增益来划分节点 信息熵是度量样本集合纯度最常用的一种指标.假设样本集合D中第k类样本所占的比重为pk,那么信息熵的计算则为下面的计算方式 当这个Ent(D)的值越小,说明样本集合 ...

随机推荐

  1. 利用 Windows API Code Pack 修改音乐的 ID3 信息

    朋友由于抠门 SD 卡买小了,结果音乐太多放不下,又不舍得再买新卡,不得已决定重新转码,把音乐码率压低一点,牺牲点音质来换空间(用某些人的话说,反正不是搞音乐的,听不出差别)… 结果千千静听(百度音乐 ...

  2. [转]搭建Hadoop伪分布式环境

    https://my.oschina.net/MyHeaven1987/blog/1821509 http://hadoop.apache.org/docs/current/hadoop-projec ...

  3. Application Initialization UI for IIS 7.5

    IIS Application Initialization for IIS 7.5 enables website administrators to improve the responsiven ...

  4. 【Android】TypedArray和obtainStyledAttributes使用

    在编写Android自定义按钮示例基础上,如果要指定字体大小产生这样的效果: 其实是不需要自定义变量的,可以直接使用TextView的配置属性: <com.easymorse.textbutto ...

  5. 【转】Windows Server 2008 R2下安装 .net framework3.5

    原文地址:http://hi.baidu.com/tonny_dxf/item/6831bcdc3d7c06e7b2f7777c      [你必须用角色管理工具安装.net framework3.5 ...

  6. redis 配置命令

    Redis:是一个key/v  型数据 是nosql的一种 CAP 理论: C:多个数据节点上的数据一致: A:用户发出请求后的有限时间范围内返回结果: P:network partition,网络发 ...

  7. sql 跨服务器查询

    创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin ...

  8. springmvc+ajax——第一讲(搭建)

    下面是整个整合测试的代码: ajax01.html TestController web.xml springmvc.xml applicationContext.xml <!DOCTYPE h ...

  9. mySql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver

    Mysql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver 1. 在使用mysql时,控制台日志报错如下: Loading class `c ...

  10. 062 SparkStream内部原理

    1.DStream 内部是一系列的RDD组成的,每个RDD与RDD的产生时间形成一个pair保存在内存中(下面有) RDD包含了对应时间段的所有block数据. 2.DStream下的方法 /** T ...