决策树(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 机器学习 决策树的更多相关文章

  1. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  2. Python机器学习基础教程-第2章-监督学习之决策树

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  3. 【Python机器学习实战】决策树和集成学习(一)

    摘要:本部分对决策树几种算法的原理及算法过程进行简要介绍,然后编写程序实现决策树算法,再根据Python自带机器学习包实现决策树算法,最后从决策树引申至集成学习相关内容. 1.决策树 决策树作为一种常 ...

  4. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

  5. [resource]Python机器学习库

    reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...

  6. python机器学习实战(二)

    python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...

  7. python机器学习工具包

    1. scikit-learn: Machine Learning in Python scikit-learn是一个基于NumPy, SciPy, Matplotlib的开源机器学习工具包,主要涵盖 ...

  8. Python机器学习中文版

    Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python实现感知机算法 基于Iri ...

  9. Python机器学习中文版目录

    建议Ctrl+D保存到收藏夹,方便随时查看 人工智能(AI)学习资料库 Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人 ...

随机推荐

  1. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍   我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...

  2. ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录

    前言 在.NET Core之前对于压缩样式文件和脚本我们可能需要借助第三方工具来进行压缩,但在ASP.NET MVC Core中则无需借助第三方工具来完成,本节我们来看看ASP.NET Core MV ...

  3. 理解javascript中的Function.prototype.bind

    在初学Javascript时,我们也许不需要担心函数绑定的问题,但是当我们需要在另一个函数中保持上下文对象this时,就会遇到相应的问题了,我见过很多人处理这种问题都是先将this赋值给一个变量(比如 ...

  4. Mac系统安装Aircrack-ng破解wifi密码(2)

    我们上一篇文章说过如何通过Aircrack-ng, 破解使用WPA/PSK加密方式的路由密码, 这一篇介绍的是使用Aircrack-ng破解使用WEP加密方式的路由密码: WEP和WPA/PSK的区别 ...

  5. [nginx]Windows和Mac下,nginx反向代理服务器配置

    最近做项目,前端需要用到nginx反向代理来转发请求,总结了一下在Windows和Mac上的配置,以备查询. 一.Windows 修改nginx的配置文件,nginx.conf. 1)nginx.co ...

  6. web前端 兼容性问题

    1:position属性使用过多或使用位置不恰当引起滚动时页面错乱 浏览器环境:ie7 position:relative; 网页上最直接表现就是极具破坏性的滚动错位,问题产生来自ie7自身渲染解析出 ...

  7. C++编程练习(16)----“排序算法 之 快速排序“

    快速排序 基本思想: 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 算法介绍: 设要排序的 ...

  8. js小功能合集:计算指定时间距今多久、评论树核心代码、字符串替换和去除。

    1.计算指定时间距今多久 var date1=new Date('2017/02/08 17:00'); //开始时间 var date2=new Date(); //当前时间 var date3=d ...

  9. Android SQLite总结

    SQLite在Android一般应用中还是比较常用,早期的时候碰到过不少坑,其中最烦的就是多线程并发读写问题,今天正好整理一下,做个笔记,也欢迎指正.讨论和补充. 一.查询优化 1.wal模式 开启w ...

  10. 数据库--iOS

    1.创建表 @"create table if not exists Person(id integer primary key autoincrement,name text,gender ...