python 机器学习 决策树
决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归。
优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据
缺点:可能会产生过度匹配的问题
适用数据类型:数值型和标称型 source code下载 https://www.manning.com/books/machine-learning-in-action
运行demo 重要参考学习:http://blog.csdn.net/dream_angel_z/article/details/45965463
关键代码
if so return 类标签;
else
寻找划分数据集的最好特征
划分数据集
创建分支节点
for 每个分支节点
调用函数createBranch并增加返回结果到分支节点中
return 分支节点
对应代码
def createTree(dataSet,labels):
classList = [example[-1] for example in dataSet] 不是dataset[-1] {dataset倒数第一元素} ,而这时里,dataset每一个元素里的倒数第一元素
if classList.count(classList[0]) == len(classList): 如果返回分类List count类型一样,则返回该类型!
return classList[0]#stop splitting when all of the classes are equal
if len(dataSet[0]) == 1: #stop splitting when there are no more features in dataSet 如果只有一个元素
return majorityCnt(classList)
bestFeat = chooseBestFeatureToSplit(dataSet) 选择最好的特殊索引
bestFeatLabel = labels[bestFeat] 而得到这个label flippers 还是 no surfaces 呢
myTree = {bestFeatLabel:{}} 然后创建该最好的分类 的子树
del(labels[bestFeat]) 删除了该最好分类
featValues = [example[bestFeat] for example in dataSet]
uniqueVals = set(featValues)
for value in uniqueVals:
subLabels = labels[:] #copy all of labels, so trees don't mess up existing labels
myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
return myTree
在子节点 是否可分类 决定 递归 如是一类型 则 递归往下分类
检测数据集的每个子项是否属于同一类: 如果值都是a,而result都是y/n 则为一类 所以,是两个参数输入
看代码看不懂,不明白到底是要做什么!分类,我们把一堆数据分类,以label来标签上。
像k邻近 classify([0, 0], group, labels, 3) 意思是,把新数据[0,0] 按k=3的邻近算法在 group,labels数据里的分类! group与label对应!
数据的意思是 条个维度的值 而最后一个是 是否为 fish的,结果标签
所以,如果是我分,是要把每个维度 切出来 + 结果标签 成二维的 一列数组,去比较分类
测试应该是,把前n个维量的值,向量输入,输出是yes or no!
一开始看,比较头晕,条理清楚,理顺下思路,看代码才易懂!
理解了目标和初始数据,你才明白,原来classList是结果标签!,是对应将要分类的dataset的对应结果标签
而labels 则是 特征名,对应开始的dataset的维度,特征的名strname
bestFeatLabel 最好分类特征的维度名 是第一维度还是第二,第N
featValues 是bestFeatLabel 的维度下,的值数组。就是这一维度下的组 用来做新的分类比较。
uniqueVals 用set判断来是否一类,
比如
dataSet = [[1, 1, 'yes'],
[0, 1, 'yes'],
[1, 0, 'no'],
[1, 0, 'no'],
[0, 0, 'no']]
labels = ['no surfacing','flippers',]
这样的createTree :{'flippers': {0: 'no', 1: 'yes'}} 直接把no surfacing的维度省略了
在划分数据集之前之后信息发生的变化称为信息增益。
uniqueVals = set(featList) set是归类,看只有多少种类
calcShannonEnt <class 'list'>: [[1, 'no'], [1, 'no']] = 0 >> * 0.4 = 0 为什么是0
log(prob,2) log(1,2) = 0;2^0=1,prob <1 log Value <0
<class 'list'>: [[1, 'yes'], [1, 'yes'], [0, 'no']] = 0.91 >> * 0.6 = 0.55
25行 for featVec in dataSet: 计频 for prop
0.9709505944546686 = calcShannonEnt(dataSet) <class 'list'>: [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
0.5509775004326937 = += prob * calcShannonEnt(subDataSet) 分开的子集后,的概率*香农滴,得到的和,原来的整体的香浓滴比
0.4199730940219749 infoGain = baseEntropy - newEntropy
python 机器学习 决策树的更多相关文章
- Python机器学习基础教程-第2章-监督学习之决策树集成
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程-第2章-监督学习之决策树
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- 【Python机器学习实战】决策树和集成学习(一)
摘要:本部分对决策树几种算法的原理及算法过程进行简要介绍,然后编写程序实现决策树算法,再根据Python自带机器学习包实现决策树算法,最后从决策树引申至集成学习相关内容. 1.决策树 决策树作为一种常 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- [resource]Python机器学习库
reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...
- python机器学习实战(二)
python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...
- python机器学习工具包
1. scikit-learn: Machine Learning in Python scikit-learn是一个基于NumPy, SciPy, Matplotlib的开源机器学习工具包,主要涵盖 ...
- Python机器学习中文版
Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python实现感知机算法 基于Iri ...
- Python机器学习中文版目录
建议Ctrl+D保存到收藏夹,方便随时查看 人工智能(AI)学习资料库 Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人 ...
随机推荐
- jQuery如何实现点击页面获得当前点击元素
获得jquery对象: function foo(e){ var obj = $(e.target); }
- MySQL数据类型--日期时间
一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是略懂略懂的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来 ...
- JS日期时间加减实现
首先,上代码 var diffDate = function(date, diff) { return new Date( Date.UTC( date.getUTCFullYear(), date. ...
- Android 隐藏软键盘
隐藏软键盘 public void hideSoftInputView() { InputMethodManager manager = ((InputMethodManager) this.getS ...
- 微信小程序----关于变量对象data 和 前端wxml取后台js变量值
(一)页面变量对象data 对象data 有两个方面用途 第一,前端wxml的数据渲染是通过设置此对象中定义的变量进行关联展现的 第二,定义JS页面中的页面局部变量,使其整个页面中可使用或调用 对象d ...
- [html5]学习笔记一 新增的主题结构元素
html5 新增的主体结构元素有:article,section,nav,aside,time,pubdate元素. 1. article元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引 ...
- Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能
都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是 ...
- mybatis入门-第一个程序
今天,我们就一起来完成mybatis的第一个小demo,使用mybatis对我们的数据库进行一个小小的操作. 需求 根据用户id查询用户的信息. 环境搭建 java环境:jdk1.7版本 开发工具:e ...
- java类初始化,使用构造方法
public class test { /** * java类的初步学习: * 学会使用和类名相同的两种构造方法,对公共类方法的调用: */ public static void main(Str ...
- java作业—3
动手动脑: 一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例:(int)(1+Math.r ...