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机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人 ...
随机推荐
- 【Zookeeper】源码分析之Watcher机制(三)之Zookeeper
一.前言 前面已经分析了Watcher机制中的大多数类,本篇对于ZKWatchManager的外部类Zookeeper进行分析. 二.Zookeeper源码分析 2.1 类的内部类 Zookeeper ...
- 如何使用DockerHub官方的mysql镜像
Mysql是一个广泛使用的开源关系型数据库. 如何获取Mysql Docker镜像? docker pull mysql:5.7 如何使用这个Docker镜像? 1.启动一个Mysql Server容 ...
- iOS-如何使用symbolicatecrash
iOS-如何使用symbolicatecrash 如何使用symbolicatecrash工具分析iOS Crash文件: 原文地址:[iOS Crash文件分析]-如何使用symbolicatecr ...
- 微服务框架概览之 Netty
Netty 是什么 Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序 Netty 架构图 为什么选择Netty 通过对Netty的分析,我 ...
- 使用动态内置的JSON 数据源
自从ActiveReports 11发布以来,一个重磅功能推出,为Web开发人员又带来一大福利.JSON数据常常会通过WebService来动态生成JSON数据,因此动态链接JSON 数据内置参数会更 ...
- Java内部类基本使用
链接到外部类 创建内部类时,那个类的对象同时拥有封装对象(封装内部类的外部类)的一个链接,所以内部类可以访问外部类的成员. 内部类拥有对外部类所有元素的访问权限. 看如下代码,内部类SSe ...
- Win8下,以管理员身份启动VS项目
之前一直是先以管理员身份启动VS,然后再打开项目的,比较麻烦,找了好久,总算有一个处理方案了 在Windows7下 通常使用修改属性的方式:在任意快捷方式上右击,选择属性,选择高级,选择以管理员身份启 ...
- spring入门--Spring框架底层原理
上一篇的博客,我们可以看出来,spring可以维护各个bean (对象),并向其中注入属性值.那么,如果们要把一个对象的引用注入另外一个对象呢?应该怎么处理呢? 我们知道,对于对象中的属性来说,我们注 ...
- Convex Hull 实现理论+自制Python代码
Convex Hull 概述 计算n维欧式空间散点集的凸包,有很多的方法.但是如果要实现快速运算则其难点在于:如何快速判断散点集的成员是否是在凸集的内部.如果可以简化判断的运算过程,则可以极大简化迭代 ...
- WDCP下安装PHPWind
创建整站跟新建站点的区别是创建整站会一并生成ftp跟mysql数据库 这边只要填写一个域名(如果你有域名就填写下域名 如果你没有域名 或者跟我一样到这步去申请域名的可以填写ECS公网ip否则无法访问新 ...