机器学习-决策树(decision tree)算法
学习彭亮《深度学习基础介绍:机器学习》课程
[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)算法相关推荐
- 机器学习决策树_机器学习-决策树 Decision Tree
咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...
- 决策树(Decision Tree)算法 python简单实现
1. 简介 决策数(Decision Tree)在机器学习中是比较常见的一种算法,属于监督学习中的一种. 算法流程如图: 具体算法可以详见下方参考 有空再做详解 参考:https://blog.csd ...
- 机器学习算法实践:决策树 (Decision Tree)(转载)
前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...
- Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
- [机器学习笔记] (四)决策树 Decision Tree
(四)决策树 Decision Tree 基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性 ...
- 算法杂货铺——分类算法之决策树(Decision tree)
算法杂货铺--分类算法之决策树(Decision tree) 2010-09-19 16:30 by T2噬菌体, 88978 阅读, 29 评论, 收藏, 编辑 3.1.摘要 在前面两篇文章中,分别 ...
- 决策树分类python代码_分类算法-决策树 Decision Tree
决策树(Decision Tree)是一个非参数的监督式学习方法,决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类 ...
- 决策树Decision Tree+ID3+C4.5算法实战
决策树Decision Tree 决策树的三种算法: 举个栗子: 熵entropy的概念: 信息熵越大,不确定性越大.信息熵越小,不确定性越小. 其实就是排列组合之中的概率,概率相乘得到其中一个组合, ...
- 第六章.决策树(Decision Tree)—CART算法
第六章.决策树(Decision Tree) 6.2 CART算法 CART决策树的生成就是递归地构建二叉决策树的过程.CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树. 1.Gin ...
最新文章
- value_counts()
- python字典的用法_Python字典的用法详解(附示例)
- [vue-cli]vue-cli怎么解决跨域的问题?
- 26-- 转换成小写字母
- 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
- 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
- iOS开发:remove reference与move to trash的区别
- python编写自动化脚本工具_Python自动化构建工具scons使用入门笔记
- h5移动端flexible源码适配终端解读以及常用sass函数
- ccs中如何插入字体
- 你不知道的javaScript读书笔记(六)
- 第一节:Ajax 入门及环境
- clearcase使用小结
- 微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台
- 曼哈顿距离(值得收藏)
- 几个经典app制作网站
- 信号建模-呼吸心跳信号检测方法(三)
- VSCode安装TinyPNG,并配置api key
- 在CI框架下实现验证码登录
- mos计算机考试有用吗,mos微软认证考试到底有没有作用?
热门文章
- 周立功:嵌入式软件工程方法与实践丛书
- Python3爬取迅捷语音转文字(包含持久化登陆和分片上传文件)
- cmd关机计算机名称,CMD远程关机 -电脑资料
- android textview 长按事件,利用TextView怎么实现一个长按复制功能
- 科技为汉字插上翅膀,动起来的汉字有多美
- WIN10 配置FTP服务器 加 用户名密码,本地用FileZila访问
- 原生JS代码100例
- Linux(CentOS7)在VMware上的安装以及认识操作系统
- 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView
- C++ Primer第三章 心得笔记