上一篇讲了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 importpandas as pd2

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 invaluedata: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 importDictVectorizer2 from sklearn importpreprocessing3

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 importtreefrom sklearn.externals.six importStringIO

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将决策树进行了优化,优化的手段有“剪枝”等处理,这将会在后续文章,进行讲解。

至此整个应用到此完毕,请读者手动去实践一下吧。

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

python决策树的应用_决策树应用(一)相关推荐

  1. python决策树逻辑回归_决策树,逻辑回归,PCA-算法面试题

    决策树 简述决策树原理? 决策树是一种自上而下,对样本数据进行树形分类的过程,由节点和有向边组成.节点分为内部节点和叶节点,其中每个内部节点表示一个特征或属性,叶节点表示类别.从顶部节点开始,所有样本 ...

  2. 决策树信息熵计算_决策树熵|熵计算

    决策树信息熵计算 A decision tree is a very important supervised learning technique. It is basically a classi ...

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

    标签: 本节讲解如何预测患者需要佩戴的隐形眼镜类型. 1.使用决策树预测隐形眼镜类型的一般流程 (1)收集数据:提供的文本文件(数据来源于UCI数据库) (2)准备数据:解析tab键分隔的数据行 (3 ...

  4. 机器学习_决策树_ID3算法_C4.5算法_CART算法及各个算法Python实现

    下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 https://blog.c ...

  5. 决策树原理实例(python代码实现)_决策树原理实例(python代码实现)

    决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种.看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉"亲 ...

  6. python决策树分类鸢尾花_基于决策树—鸢尾花分类

    决策树算法广泛应用于:语音识别.医疗诊断.客户关系管理.模式识别.专家系统等,在实际工作中,必须根据数据类型的特点及数据集的大小,选择合适的算法. 本文选择经典案例--<鸢尾花分类> 一. ...

  7. python实现决策树归纳_决策树【python实现】

    决策树思维导图.jpg 0.周董歌词中的决策树 为什麼 别人在那看漫画 我却在学画画 对著钢琴说话 别人在玩游戏 我却靠在墙壁背我的ABC 拿王牌谈个恋爱 而我不想被你教坏 还是听妈妈的话吧 晚点再恋 ...

  8. ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  9. python决策树预测_决策树案例:基于python的商品购买能力预测系统

    数据分析入门与实战  公众号: weic2c http://www.cnblogs.com/baiboy/p/ml3.html 目录 1 决策树/判定树(decision tree) 2 构造决策树的 ...

最新文章

  1. 57. Leetcode 257. 二叉树的所有路径 (二叉树-二叉树路径和)
  2. 基于PyTorch的CV框架,北大学生出品TorchCV
  3. 性能调优的方法及概念
  4. Chrome , Firfox 对应IE fireEvent 的方法
  5. 在28岁这一年,我也成为了一名创业狗
  6. 激活windows 7 RTM方法
  7. 两台计算机如何传输数据,详解两台电脑直连传输数据方法
  8. Xcode iOS开发:UIKit常用组件之按钮控件
  9. ROS 应用开发入门 发布者Publisher的编程
  10. 东秦OJ_1841: 超级密码
  11. FilterConfig接口及其使用方法详解
  12. 杨百万:中国股市是政策市 炒股要听党和政府的话
  13. 2010 小玩股票的进
  14. 美容仪应该怎么挑选和正确使用方法经验
  15. 计算机公开课课前互动小游戏,七款适合公开课的小游戏,让你的公开课精彩纷呈...
  16. ORA-02299的处理
  17. 相位测量轮廓术PMP+相移方法(三维测量——三、四步相移)
  18. 【打卡第243道】【二叉树】【剑指Offer】:JZ8 二叉树的下一个结点
  19. java:计算π的值
  20. 美语音标 [s]相关的变音

热门文章

  1. 智能制造案例分享系列之海尔互联工厂
  2. Java代理模式(Cglib)代理模式
  3. Android Http请求方法汇总
  4. 驱动开发之 LED(for mini2440)
  5. 嵌入式开发有年龄限制吗_嵌入式硬件工程师和软件工程师都有35岁的限制吗,有前辈能讲下吗?...
  6. 【NDN基础】Named Data Networking 学习笔记
  7. legoloam系列算法之点云处理与特征提取
  8. Java实现洛谷 P1428 小鱼比可爱
  9. 指尖江湖鸿蒙抽奖,剑网3指尖江湖鸿蒙始清活动怎么玩
  10. 关于JavaWeb JSP的思维导图