决策树应用(一)

上一篇讲了ID3决策树原理,现在开始拿一个例子进行实战

一、python机器学习库

scikit-learn。sklearn是一个Python第三方提供的非常强力的机器学习库,它包含了从数据预处理到训练模型的各个方面。在实战使用scikit-learn中可以极大的节省我们编写代码的时间以及减少我们的代码量,使我们有更多的精力去分析数据分布,调整模型和修改超参。sklearn基本包含了所有机器学习的方式,如

  • Classification 分类,如SVM
  • Regression 回归 ,如LR
  • Clustering 非监督分类,如聚类
  • Dimensionality reduction 数据降维,如PCA
  • Model Selection 模型选择
  • Preprocessing 数据预处理

sklearn包含了所有的机器学习算法,例如本文将用到sklearn中的ID3算法。

在python环境中可以通过 from sklearn.XXXX import XXXX的形式导入sklearn包,例如,本例要使用sklean中决策树将以from sklearn import tree的形式在python环境中导入决策树算法。

二、实战演练

1、项目说明

本例数据将用上一篇文章电脑销售数据,运用ID3决策树的算法对数据进行分类,即用python编程,得到最终的决策树,数据如下,我将数据放入excel表格里面,是为了方面python读取数据。

2、数据预处理

这里要说明,sklearn提供的tree类,只接受数值型的数据,不接受文本数据,所以需要对数据进行预处理,在本例中需要对数据转化成虚拟变量(dummy variable)。

(1)虚拟变量(dummy variable)

虚拟变量又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的质变量,通常取值为0或1,一般地,在虚拟变量的设置中:基础类型、肯定类型取值为1;比较类型,否定类型取值为0。这些概念往往让人看不懂,其实说白了就是将数据都变成1或者0,但具体怎么转化?拿本例的age属性来说,age有三个取值{youth,senior,middle_aged}现在将age的取值转化为dummy variable,将youth转化为[1,0,0] ,即1代表youth,后面两个0代表senior和middle_aged,同理,将senior转化为[0,1,0],将middle_aged转化为[0,0,1]。再拿student属性来说,student有两个属性{yes,no},现在将student的取值转化为dummy variable,将yes转化为[1,0],将no转化为[0,1]。按照同样的原理将整个表的数据都转化成dummy variable。

在sklearn中有个DictVectorizer类可以直接将数据转化为dummy variable,但DictVectorizer需要接受字典的形式,所以本次数据预处理的步骤有:

1、将数据转为字典形式,如表中编号1数据,转化为字典形式为:[{‘age‘:‘youth‘},{‘income‘:‘high‘},{‘student‘:‘no‘},{‘credit_rating‘:‘fair‘},{‘buys‘_computer:‘no‘}],同理其他数据也要转化呈这种形式,最后将这些字典放在一个列表当中。

2、将上一步所得的列表传入DictVectorizer中,将数据转化为dummy variable。

(2)代码实现预处理过程

 1 import pandas as pd
 2
 3 data=pd.read_excel(‘./data/决策树1.xls‘)
 4 data=pd.DataFrame(data)
 5
 6 valuedata=data.values#表里面的数据
 7 header=list(data.columns)[1:6]#表头
 8
 9 featureList=[]#这个列表用于存放处理后得到的字典
10 labelList=data[‘Class_buys_computer‘]#存放表中Class_buys_computer属性的数据
11 for value in valuedata:
12     featureDict={}
13     for i in range(4):
14         featureDict[header[i]]=value[i+1]
15     featureList.append(featureDict)
16         

以上的代码是将数据变成字典的过程,输出的featureList为:

将得到的featureList传送给sklearn中的DictVectorizer的对象,最后将数据转化为dummy variable。

1 from sklearn.feature_extraction import DictVectorizer
2 from sklearn import preprocessing
3
4 vec=DictVectorizer()
5 dummyX=vec.fit_transform(featureList).toarray()
6 lb=preprocessing.LabelBinarizer()
7 dummyY=lb.fit_transform(labelList)

preprocessing是sklearn中的预处理模块,而preprocessing.LabelBinarizer()是专门将标签变量进行二值化,比如本例,将Class_buys_computer中的取值yes和no转化为1和0

打印dummyX和dummyY的结果为:

3、建立决策树
from sklearn import tree
from sklearn.externals.six import StringIO

clf=tree.DecisionTreeClassifier(criterion=‘entropy‘)
clf=clf.fit(dummyX,dummyY)
在python环境中通过from sklearn import tree导入决策树模块,调用tree.DecisionTreefier()建立决策树模型,在参数中criterion是选择决策树中的类型,entropy代表信息熵,所以选择ID3模型。再调用fit()函数对预处理得到的dummyX,和dummyY进行训练。将得到的clf打印出来结果为:可以看到,我们建立ID3决策树的具体参数配置,具体参数的意义,可以自行查阅。现在需要对最后的模型进行可视化,决策树的可视化需要另外安装Graphviz环境,他的下载地址为 http://www.graphviz.org/,下载安装完后,需要加入环境变量,具体下载安装过程网上有很多。这里不再赘述。
with open("allElectronicsInformationGainOri.dot",‘w‘) as f:
    f=tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file=f)
它会在本目录下生成一个叫,allElecrionInformationGainOri.dot文件,里面的内容为:这种dot文件都是文字叙述,看起来有点乱,但Graphviz可以将dot文件转化为pdf格式,内容为最后的决策树形状但需要执行一个命令,就是先打开windows的命令窗口, 转化dot文件至pdf可视化决策树语句:dot -Tpdf iris.dot -o outpu.pdf,再本目录里面会得到一个pdf文件里面是最终的决策树:
这个决策树跟我们手工算出得出的形状不太一样,这是sklearn将决策树进行了优化,优化的手段有“剪枝”等处理,这将会在后续文章,进行讲解。至此整个应用到此完毕,请读者手动去实践一下吧。

下一篇文章: 决策树原理(二) 

原文地址:https://www.cnblogs.com/xlandll/p/9410957.html

时间: 2024-10-03 22:29:14

决策树应用(一)的相关文章

决策树之ID3、C4.5、C5.0 、CART

决策树是一种类似于流程图的树结构,其中,每个内部节点(非树叶节点)表示一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶节点(或终端节点存放一个类标号).树的最顶层节点是根节点.下图是一个典型的决策树(来自<数据挖掘:概念与技术>[韩家炜](中文第三版)第八章): 在构造决策树时,使用属性选择度量来选择将元祖划分成不同类的属性.这里我们介绍三种常用的属性选择度量-----信息增益.信息增益率和基尼指数.这里使用的符号如下.设数据分区\(D\)为标记类元组的训练集.假设类标号属性具有\(

决策树 随机森林 adaboost

? 熵.互信息? 决策树学习算法 ? 信息增益 ? ID3.C4.5.CART? Bagging与随机森林? 提升 ? Adaboost/GDBT ? 熵.互信息 熵是对平均不确定性的度量. 平均互信息:得知特征Y的信息而使得对标签X的信息的不确定性减少的程度.描述随机变量之间的相似程度.(条件熵.相对熵:差异性) ? 决策树 决策树学习采用的是自顶向下的递归方法,有监督学习. 其基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶节点中的实例都属于同一类. 建立

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

数据挖掘(三)——决策树

一.概念 一张图就可以理解决策树是什么 图中的属性有三种:No Surfacing (水下是否可生存).Filppers(有无脚蹼).Fish(鱼),通常我们通过前两个属性来判断第三个属性,判断到底是不是鱼.所以 第三个属性这里就称它为决策属性 二.构建决策树的基本步骤 1.将所有数据看作是一个节点 2.计算信息熵选择出最好的分割点(如图中的No Surfacing或Filppers) 3.分割数据(假如分成两份数据子集A和B),看数据子集中的决策属性是否相同,相同则不继续分 4.不相同则继续分

3 决策树(一)

3.1  决策树的构造 3.1.1 信息增益 熵(entropy)是信息的期望值.如果待分类的事物可能划分在多个分类中,则符号xi的信息定义为:,p(xi)为该分类的概率. 为了计算熵,需计算所有类别所有可能包含的信息期望值:,n是分类的数目. 3.1.2 划分数据集 分类算法需要:上述的测量信息熵.划分数据集.度量划分数据集的熵. 注意:这里数据集需要满足以下两个办法: <1>所有的列元素都必须具有相同的数据长度 <2>数据的最后一列或者每个实例的最后一个元素是当前实例的类别标签

决策树

什么是决策树 决策树算法的具体描述 常见的决策树算法 算法实现可能遇到的局限性和解决方法 与其他算法比较的优缺点 决策树的例子及常见算法:http://blog.csdn.net/v_july_v/article/details/7577684 决策树过渡拟合解决方法:http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html 决策树的算法描述:http://www.cnblogs.com/fengfenggirl/p/clas

决策树ID3算法预测隐形眼睛类型--python实现

本节讲解如何预测患者需要佩戴的隐形眼镜类型. 1.使用决策树预测隐形眼镜类型的一般流程 (1)收集数据:提供的文本文件(数据来源于UCI数据库) (2)准备数据:解析tab键分隔的数据行 (3)分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数绘制最终的树形图 (4)训练算法:createTree()函数 (5)测试算法:编写测试函数验证决策树可以正确分类给定的数据实例 (6)使用算法:存储数的数据结构,以使下次使用时无需重新构造树 trees.py如下: #!/u

【Machine Learn】决策树案例:基于python的商品购买能力预测系统

决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结合视频学习和书籍基础的笔记所得.本系列文章将采用理论结合实践方式编写.首先介绍机器学习和深度学习的范畴,然后介绍关于训练集.测试集等介绍.接着分别介绍机器学习常用算法,分别是监督学习之分类(决策树.临近取样.支持向量机.神经网络算法)监督学习之回归(线性回归.非线性回归)非监督学习(

《机器学习实战》——决策树

原理(ID3): 依次选定每个特征,计算信息增益(基本信息熵-当前信息熵),选择信息增益最大的一个作为最佳特征: 以该特征作为树的根节点,以该最佳特征的每一个值作为分支,建立子树: 重复上述过程,直到:1) 所有类别一致 2) 特征用尽 优点: 简单容易理解: 可处理有缺失值的特征.非数值型数据: 与训练数据拟合很好,复杂度小 缺点: 选择特征时候需要多次扫描与排序,适合常驻内存的小数据集: 容易过拟合: 改进: ID3算法偏向取值较多的特征(宽且浅的树),适合离散型数据,难处理连续型数据.香农