基本原理

decision stump,决策树桩(我称它为一刀切),也称单层决策树(a one level decision tree),单层也就意味着尽可对每一列属性进行一次判断。如下图所示(仅对 petal length 进行了判断):

从树(数据结构)的观点来看,它由一个内部节点(internal node)也即根节点(root)与终端节点(terminal node)也即叶子节点(leaves)直接相连。用作分类器(classifier)的 decision stump 的叶子节点也就意味着最终的分类结果。

从实际意义来看,decision stump 根据一个属性的一个判断就决定了最终的分类结果,比如根据水果是否是圆形判断水果是否为苹果,这体现的是单一简单的规则(或叫特征)在起作用。

显然 decision stump 仅可作为一个 weak base learning algorithm(它会比瞎猜 12\frac12 稍好一点点,但好的程度十分有限),常用作集成学习中的 base algorithm,而不会单独作为分类器。

既然 decision stump 仅可对一个属性进行一次判断获取最终的分类结果,显然我们寻找具有最低错误率的单层决策树。

所要优化的目标函数为:

argmin1≤i≤d1N∑n=1N1yn≠gi(x)

\underset{1\leq i\leq d}{\arg\min}\frac1N\sum_{n=1}^N1_{y_n\neq g_i(\mathbf x)}

ii 表示属性列,NN 为样本集的大小,d<script type="math/tex" id="MathJax-Element-215">d</script> 为属性列的个数。

代码实现

找到具有最低错误率的单层决策树,需要遍历全部的属性列,遍历属性列下所有可能的阈值(当然在一定的步长范围内),以及所有的 True/False 的分配,也即至少需要三层循环。

# 该函数不直接在客户端调用,而被 buildStump 调用
# 如果使用面向对象的思路封装的话,
# 该函数会作为私用成员函数被其他公有成员函数调用
# 如上图所示,这里传递进来的第三个参数是一个具体的数值,
# 更简便,且能力更强的做法是传递进来一个断言 predicatedef stumpClassify(X, j, thresh, ineq):# X:数据集,j:属性列# thresh:阈值,ineq:比较pred = np.ones(X.shape[0])if ineq == 'lf':pred[X[:, j] <= thresh] = -1else:pred[X[:, j] > thresh] = -1return preddef buildStump(X, y, w):# X:数据集,y:labels# w:权值,初始化为 np.ones(N)/NN, d = X.shapeminErr = np.infnumStep = 10bestStump, bestLabel = {}, np.zeros(N), for j in range(N):rangeMin, rangeMax = X[:, j].min(), X[:, j].max()stepSize = (rangeMax-rangeMin)/numStepfor i in range(-1, numStep+1):thresh = rangeMin + i*stepSizefor ineq in ['lt', 'gt']:pred = stumpClassify(X, j, thresh, ineq)errLabel = np.ones(N)errLabel[pred == y] = 1weightedErr = w.dot(errLabel)if minErr > weightErr:minErr = weightErrbestClass = predbestStump['dim'] = jbestStump['ineq'] = ineqbestStump['thresh'] = threshreturn bestStump, minErr, bestClass                 

机器学习基础(十八) —— decision stump相关推荐

  1. 机器学习之十八(读书笔记)

    Generative Adversarial Network(生成性对抗网络) Conditional Generation by GAN 二十八.Generative Adversarial Net ...

  2. 【机器学习基础】八种应对样本不均衡的策略

    1 什么是非均衡 2 10种解决办法 2.1 重采样(六种方法) 2.2 调整损失函数 2.3 异常值检测框架 2.4 二分类变成多分类 2.5 EasyEnsemble 3 为什么树模型不担心这个问 ...

  3. 机器学习(十八)应用实例:照片OCR

    文章目录 Log 一.问题描述与流水线(Problem description and pipeline) 1. 问题描述(The Photo OCR problem) 2. 流水线(Photo OC ...

  4. 机器学习(十八)——关联规则挖掘

    关联规则挖掘 基本概念(续) 定义一:设I={i1,i2,-,im}I=\{i_1,i_2,\dots,i_m\},是m个不同的项目的集合,每个iki_k称为一个项目.项目的集合I称为项集.其元素的个 ...

  5. 机器学习知识点(十八)密度聚类DBSCAN算法Java实现

    为更好理解聚类算法,从网上找现成代码来理解,发现了一个Java自身的ML库,链接:http://java-ml.sourceforge.net/ 有兴趣可以下载来看看源码,理解基础ML算法.对于DBS ...

  6. 西瓜书+实战+吴恩达机器学习(十八)降维(主成分分析 PCA)

    文章目录 0. 前言 1. 主成分分析PCA 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 维数灾难:在高维情形下出现的数据样本稀疏.距离计算困难等问题. 缓解 ...

  7. Mysql基础(十八):主从架构

    目录 1.MySQL的主从复制架构 2.主从复制架构的意义? 2.1.高可用架构 2.2.读写分离架构 从库的应用场景? 3.MySQL实现主从复制的工作原理 4.如何为MySQL搭建一套主从复制架构 ...

  8. python_fullstack基础(十八)-并发编程

    并发编程 一.进程 1.理论背景 ①操作系统背景 手工操作-穿孔卡片  原理:用户独占计算机,CPU等待手工操作,资源利用和CPU利用效率极低 批处理-磁带处理.批处理系统  原理:主机与输入机之间增 ...

  9. 机器学习笔记(十八)——HMM的参数估计

    一.HMM中的第三个基本问题 参数估计问题:给定一个观察序列O=O1O2-OTO=O_1O_2\dots O_T,如何调节模型μ=(A,B,π)\mu = (A, B, \pi)的参数,使得P(O|μ ...

  10. Python基础(十八): 类和对象以及它们的属性

    一.类 最简单的经典类结构 class 类名:pass 复制代码 1.定义一个类 class Money:pass 复制代码 类名规范: 驼峰命名法, 并且首字母大写 2.实例化一个对象 创建一个对象 ...

最新文章

  1. python tornado教程_Tornado 简单入门教程(零)——准备工作
  2. NLP | 医学AI又一突破,微软开源生物医学NLP基准:BLURB
  3. 【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )
  4. ALV复制内容到剪贴板
  5. 复现经典:《统计学习方法》第21章 PageRank算法
  6. [C++11]继承构造函数
  7. html制作任务计划列表网页,添加计划任务的脚本
  8. 扩展控件--NumberTextBox
  9. Bootstrap3.0学习第十一轮(输入框组)
  10. Linux学习16-磁盘分区MSDOS与GPT的区别
  11. 设计模式之工厂模式——应用最广泛的模式
  12. 快手c类违规影响引流吗?快手C类违规封号还能解封吗?
  13. 百钱买百鸡 假设公鸡5文钱一只 母鸡三文钱一只 小鸡1文钱三只,要求用100文钱 , 如何买到100只鸡
  14. SAS编程|ADAM阶段性小结
  15. Intellij IDEA摸鱼插件 看电子书 AndroidStudio 摸鱼插件 摸鱼神器 IdeaTxt
  16. python当前时间加一分钟_Python实现的当前时间多加一天、一小时、一分钟操作示例...
  17. LINUX下LAMP与PHPWIND
  18. Ubuntu20.04下可用的一些五笔输入法介绍
  19. CSS3新特性详解(三):CSS3 2D转换和3D转换 transform 变形使用详解
  20. 幼年产品狗如何养成?这是完全自我修炼教程!

热门文章

  1. mysql无法通过工具连接_MySQL 8.0版本无法使用 node、Navicat等三方工具连接的问题...
  2. source insight 无法查找与跳转和恢复默认设置
  3. 卷积神经网络CNN总结(转)
  4. Java 疑问自问自答
  5. 八 Civil3d常用显示样式的编辑与创建 ----点标签样式2
  6. android学习笔记1-布局的初步了解以及 控件的常见属性
  7. Python collection模块与深浅拷贝
  8. 利用openpyxl来读取Excel数据
  9. 完全搞定iframe(框架)里的滚动条
  10. JSK-17 X的平方根【二分法】