学习彭亮《深度学习基础介绍:机器学习》课程
[toc]

决策树概念

决策树是一种用于监督学习的层次模型,由此,局部区域通过少数几步递归分裂决定。
决策树是一个类似流程图的树结构:其中每个结点表示在一个属性上测试,每个分支代表一个属性输出,每个树叶结点代表类或类分布。树的最顶层是根节点。

信息熵entropy概念

一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息 => 信息量的度量就等于不确定性的多少

比特(bit)来衡量信息的多少
-[P1*log2(P1)+P2*log2(P2)+…+Pn*log2(Pn)] (其中Pi:i发生的概率)
变量的不确定性越大,熵也就越大

决策树算法

  • 分类与回归树(classification and regression,CART)算法
  • ID3算法
  • C4.5算法(ID3算法的扩展)

相同点:都是贪心算法,自上而下
区别:信息度量方法不一样: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

决策树归纳算法实例 (ID3)

选择属性判断结点:信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D),通过A来作为节点分类获取了多少信息

假设以年龄(youth)来分

14个人中年轻人(youth)有5个: P1=5/14 ,在5个人中yes有两个,no有三个

在没有用年龄区分是信息熵为0.940bit,用年龄区分信息熵为0.694bit,所以以年轻人来分信息获取量为:

同理:
根据收入信息获取量:Gain(income)=0.029
根据学生信息获取量:Gain(student)=0.151
根据信用信息获取量:Gain(Credit_rating)=0.048

所以以age信息获取量最大,取它做为第一个节点,

下一步在选取新的属性来做为新结点,同样计算谁能带来最大的信息获取量。重复进行。

注:连续型要离散化处理。

剪枝

  • 先剪枝
  • 后剪枝,实践中比先剪枝效果好。
    在后剪枝中,我们让树完全增长至所有树叶都是纯的并具有零训练误差。然后,我们找出导致过分拟合的子树并剪掉它。

决策树优缺点

  • 优点:直观;便于理解;小规模数据集有效
  • 缺点:处理连续变量不好;类别较多时,增加的比较快;可规模性一般

决策树归纳算法实例代码 (Python)

Python机器学习的库:scikit-learn
覆盖问题领域:分类(classification), 回归(regression), 聚类(clustering), 降维(dimensionality reduction),模型选择(model selection), 预处理(preprocessing)

代码

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-09 16:17
# @Abstract:Decision_Tree.py   决策树应用# DictVectorizer: 读取原始数据
import csv
# 导入机器学习包# DictVectorizer: 将dict类型的list数据,转换成numpy array
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree
from sklearn import preprocessing
from sklearn.externals.six import StringIO# 主程序#读取使用的数据文件
allElectroncsData=open(r'D:\Python\PyCharm-WorkSpace\MachineLearningDemo\Decision_Tree\data\buyComputer.csv','rb')
#csv中按行读取函数reader()
reader=csv.reader(allElectroncsData)
headers=reader.next() #读取第一行标题# print (headers)featureList=[]  # 装取特征值
lableList=[]    # 装取类别 buy:yes|no#逐行读取
for row in reader:lableList.append(row[len(row)-1]) #每行最后一列的值加入lableListrowDict={} #字典 key为对并的属性名:eg:age  value为属性值:eg:youthfor i in range(1,len(row)-1):rowDict[headers[i]]=row[i]featureList.append(rowDict)# print featureList#使用python提供的DictVectorizer()进行转化我们需要的特征值dummyx格式
vec=DictVectorizer()
dummyx=vec.fit_transform(featureList).toarray()# print ("dummyx:"+str(dummyx))
# print (vec.get_feature_names())# print ("lableList:",str(lableList))#使用python提供的DictVectorizer()进行转化我们需要的分类dummyy格式
lb=preprocessing.LabelBinarizer()
dummyy=lb.fit_transform(lableList)# print ("dummyy:"+str(dummyy))# using decision tree for classfication# 使用ID3算法,即用Information Gain来分类
clf=tree.DecisionTreeClassifier(criterion='entropy')
# 建模   参数:特征值矩阵 分类列矩阵
clf=clf.fit(dummyx,dummyy)# print ("clf",str(clf))# 产生dot文件
with open("allElectroncInfomationGainori.dot",'w') as f:# 原始的数据变为0 1了,再画决策树时要还原之前定义的feature,即feature_names=vec.get_feature_names()f=tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file=f)
# 取第一行
oneRowX=dummyx[0,:]
print ("oneRowX:"+str(oneRowX))#预测新数据
newRowx=oneRowX
newRowx[0]=1
newRowx[2]=0print ("newRowx:"+str(newRowx))predictedY=clf.predict(newRowx)
print  ("predictedY:"+str(predictedY))

数据

需把每一行进行转化为以下格式:

print featureList

print ("dummyx:"+str(dummyx))
print (vec.get_feature_names())
print ("lableList:",str(lableList))

print ("dummyy:"+str(dummyy))

print ("clf",str(clf))

print ("oneRowX:"+str(oneRowX))

得到的allElectroncInfomationGainori.dot

#预测新数据
newRowx=oneRowX
newRowx[0]=1
newRowx[2]=0print ("newRowx:"+str(newRowx))predictedY=clf.predict(newRowx)
print  ("predictedY:"+str(predictedY))

使用graphviz转为PDF决策树

安装graphviz:https://graphviz.gitlab.io
配置环境变量,转化dot文件至pdf可视化决策树:dot -Tpdf 文件名.dot -o 文件名.pdf


机器学习-决策树(decision tree)算法相关推荐

  1. 机器学习决策树_机器学习-决策树 Decision Tree

    咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...

  2. 决策树(Decision Tree)算法 python简单实现

    1. 简介 决策数(Decision Tree)在机器学习中是比较常见的一种算法,属于监督学习中的一种. 算法流程如图: 具体算法可以详见下方参考 有空再做详解 参考:https://blog.csd ...

  3. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  4. Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  5. [机器学习笔记] (四)决策树 Decision Tree

    (四)决策树 Decision Tree 基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性 ...

  6. 算法杂货铺——分类算法之决策树(Decision tree)

    算法杂货铺--分类算法之决策树(Decision tree) 2010-09-19 16:30 by T2噬菌体, 88978 阅读, 29 评论, 收藏, 编辑 3.1.摘要 在前面两篇文章中,分别 ...

  7. 决策树分类python代码_分类算法-决策树 Decision Tree

    决策树(Decision Tree)是一个非参数的监督式学习方法,决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类 ...

  8. 决策树Decision Tree+ID3+C4.5算法实战

    决策树Decision Tree 决策树的三种算法: 举个栗子: 熵entropy的概念: 信息熵越大,不确定性越大.信息熵越小,不确定性越小. 其实就是排列组合之中的概率,概率相乘得到其中一个组合, ...

  9. 第六章.决策树(Decision Tree)—CART算法

    第六章.决策树(Decision Tree) 6.2 CART算法 CART决策树的生成就是递归地构建二叉决策树的过程.CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树. 1.Gin ...

最新文章

  1. value_counts()
  2. python字典的用法_Python字典的用法详解(附示例)
  3. [vue-cli]vue-cli怎么解决跨域的问题?
  4. 26-- 转换成小写字母
  5. 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
  6. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
  7. iOS开发:remove reference与move to trash的区别
  8. python编写自动化脚本工具_Python自动化构建工具scons使用入门笔记
  9. h5移动端flexible源码适配终端解读以及常用sass函数
  10. ccs中如何插入字体
  11. 你不知道的javaScript读书笔记(六)
  12. 第一节:Ajax 入门及环境
  13. clearcase使用小结
  14. 微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台
  15. 曼哈顿距离(值得收藏)
  16. 几个经典app制作网站
  17. 信号建模-呼吸心跳信号检测方法(三)
  18. VSCode安装TinyPNG,并配置api key
  19. 在CI框架下实现验证码登录
  20. mos计算机考试有用吗,mos微软认证考试到底有没有作用?

热门文章

  1. 周立功:嵌入式软件工程方法与实践丛书
  2. Python3爬取迅捷语音转文字(包含持久化登陆和分片上传文件)
  3. cmd关机计算机名称,CMD远程关机 -电脑资料
  4. android textview 长按事件,利用TextView怎么实现一个长按复制功能
  5. 科技为汉字插上翅膀,动起来的汉字有多美
  6. WIN10 配置FTP服务器 加 用户名密码,本地用FileZila访问
  7. 原生JS代码100例
  8. Linux(CentOS7)在VMware上的安装以及认识操作系统
  9. 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView
  10. C++ Primer第三章 心得笔记