文章目录

  • 分类问题的定义
  • 决策树问题
    • Gini系数
    • 过拟合
  • 误差及泛化理论
    • 泛化理论的理解和证明
  • 相关习题

都说港中文陶宇飞老师的数据挖掘课讲得非常好,这次选上,果然感觉老师思路清晰,循循善诱。但由于我对全英文授课还不太熟悉,加之专业水平实在不堪,因此颇有听天书的感觉。这篇文章是我对相关概念的梳理与理解。

分类问题的定义



首先老师抛出了对分类问题的定义,本质上就是在某一个分布D上找到一个分类器,可以实现在该分布上的特征域X到标签域Y的预测,然后我们需要使得这个分类器分类错误的误差尽可能小。这里其实我之前一直忽略的是这个分布D,其实所有分类器都是基于特定数据分布的。

但是上面有一个问题,就是我们是无法很准确地去描述一个分布的信息,因此常常只能基于某一个训练数据集S,这个S的数据是从分布D中得到的,都是独立同分布(independent and identically distributed (i.i.d.))的。但这其实就引入了两个误差概念:

  • 经验误差(empirical error):也叫训练误差,模型在训练集上的误差。
  • 泛化误差(generalization error):模型在新样本集(测试集)上的误差。

我们是想找到最佳泛化误差的,但是手头上能控制的只有经验误差,这两者的关系就是通过后面的一个关于误差的通理论证的。

决策树问题

老师选了决策树问题作为分类问题的典型例子,这和大陆常常拿线性二分类问题略有区别。这个部分也是考察的重点,需要着重了解各种推导以及计算,陶老师也给出了一些练习题给我们。

例子如上:
叶子结点上带的是类别标签class label,由于是二分类问题,所以只可能是yes or no(或者-1 or 1),内部节点上是属性attribute,该属性上有个属性断言predicate,满足属性声明的在属性节点的左侧,不满足的在右侧。定义如下:

如何定义这个断言,其实就相当于在属性上定义一种分割的方式split,由于属性可以分为序数属性(ordinal attribute)、标称属性(nominal attribute),因此其分割会略有不同,可以将ordinal attribute理解为可以用值评定大小关系定量描述,而nominal attribute只能通过枚举的方式定性描述。

如何利用决策树来对样本进行分类,就是按照下面的步骤,从根结点开始不断向下查找,直到找到叶子结点的class label。

可以观察到的是,决策树中的每个节点对应的数据S(u)是整个数据集的子集(root节点表示整个数据集),比方说例子中的education节点,表示「不是programmer的occupation」的子集:

Gini系数

上面只是引入了Split的定性概念,一个Split会将「符合P(u)」以及「不符合P(u)」的样本划分到两端,但是我们应该如何衡量我们是否挑选了一个好的Split值,表示其划分地很好呢?这就引入了GINI系数的定量概念。

GINI系数是针对一个子集set来说的,就是上面Split划分出来的决策树的节点代表的set,GINI衡量了划分后一个数据集的纯净程度(也就是各种label的“多样性”),GINI系数越小,代表数据集越纯净,样本范围是该子集的元素,在该二分类问题中,label就是全局已经标注好的yes、no。理想化来说,我们希望internal node在分割出S(v1),S(v2)的时候,S(v1)或者S(v2)内的label是一致的,划分地越纯净(GINI越小),训练样本的empirical error越小。

在下面的计算过程中,我们只关心纯净程度,因此 n y n_y ny​就是全局S中带yes label的样本,而不关心它根据属性究竟是划分到了internal node的左边还是右边,就像相关习题中的习题1的第二小问。但是这种在计算时候的“不关心”,是否会让最后的分类正确率也不尽人意呢?在思考过后我认为是不会的,从后面过拟合中的改进Hunt’s Algorithm递归中我们可以看出,终止条件中标记叶子节点是根据其中大部分majority的label标记的,从上而下的路径也是尽可能选择纯净度最高的属性和值(GINI最小),从下往上回溯相当于是用纯净度最高的那个majority的label标记。

由此引入一个Split的GINI,我们只需要针对这个节点所有的Split计算GINI,然后找到其中最小的那个作为最佳分割。因为分割的GINI越小,代表其分割的子集越纯净

在知道Good Split后,我们就可以通过Hunt’s 算法构建一棵决策树,这是一种递归建立的过程,从上往下建立,从下往上递归返回结果,其中终止条件有两个:

  1. S S S的标签都是一样的,直接将该标签作为叶子节点返回
  2. S S S的所有属性值都是一样的,直接将 S S S中类别最多的标签作为叶子节点返回

过拟合

决策树建立的过程就是要让当前训练样本的emprical error尽可能小,但是这也是产生过拟合的主要原因。

决策树中产生过拟合的原因在于,随着树的不断扩深,我们上面也知道树的每个节点都是训练样本的子集,当某个节点代表的样本子集过小,虽然其生成的树的结构,能够很好地拟合训练数据,但是当将它作用在测试数据上时,可能会将不属于某个叶子的样本划分到该label上。

为了尽可能减少决策树构建过程中的过拟合,我们将Hunt’s算法修改如下,在样本过小时提前终止,这时终止条件有三个:

  1. S S S的标签都是一样的,直接将该标签作为叶子节点返回
  2. S S S的所有属性值都是一样的,直接将 S S S中类别最多的标签作为叶子节点返回
  3. S S S的数量过小的时候,直接将 S S S中类别最多的标签作为叶子节点返回

误差及泛化理论

通过一个题目可以看到决策树误差的产生,就是当我们的label叶子节点,将不属于该标签的样本,划入这个范围,因此产生了误差。


跟着上面下来,误差其实分为两类:

  • 经验误差(empirical error):也叫训练误差,模型在训练集上的误差。
  • 泛化误差(generalization error):模型在新样本集(测试集)上的误差。

不同于我们之前理解的误差,课件这里的误差实际上是指一个比例。


其蕴含的一个通理如上,其中errD为泛化误差,errS为训练误差,泛化误差被训练误差上界约束。其中可以看出当决策树节点越少,它理论上可以产生的最终分类器的数量就会减少,对应的就是H减少,让泛化误差上界缩小。当我们增加训练样本数量,S变大,泛化误差上界也会变小。

其中老师抛出了一个问题,当存在两棵决策树,它们有相同的empirical error,但一棵树只有10个节点,另一棵树有100个节点,我们通过Generalization Theorem应该选择哪一个?应该选择size更小的那个,因为我们可以通过更小的样本数量得到较小的泛化误差上界。

这其实也是针对所有分类器的泛化,之前针对某一个数据集S,我们是可以找到一个“好的”分类器的,但是将这个分类器放到新的数据集上,是否能得到好的效果是不确定的,也正是由于上面的那个泛化理论,用训练集的误差约束了测试集的误差的上界,因此在满足同一个数据分布的不同数据集下,我们在训练集上学到的好的模型,也是能够在测试集上表现良好的。

泛化理论的理解和证明

为了能够更清楚地阐明上面这个泛化理论的内涵,老师专门又用了一节课来为我们讲解。

经验误差是如何来约束泛化误差的呢?具体地来说,当一个训练集上的训练误差errS<=10%,后面加上的项<=1%,那么errD应该是<=11%,但是却不会过分地小于7%,因为如果是这样的话,errS应该是有比10%更小的上界的。

如何直观地理解其中“the set of classifiers that can possibly be returned”,即可能选作分类器的模型个数呢?在一个有106个参数的模型中,如果每个参数用一个8 byte的浮点数表示,那么这里占用了64*106 bit的空间,理论上来说这些数字就会有264*1000000 种排列情况,每一种排列即代表一种不同的模型。

其完整的证明过程老师与我们一起推导如下:
首先需要了解Hoeffding Bound约束,对于隶属于同一分布的伯努利变量X1、X2…Xn,设他们的数学期望为p,他们实际取值Xi的累加和t,除以数量n后得到t/n,这个t/n理论上的数学期望应该为单个伯努利变量的数学期望p,但是由于实际值和期望值有一定偏差,这种偏差的概率Pr是有一个上界的,根据deviation的变大而缩小。

还需要了解Union Bound,即多种事件联合发生的概率不大于他们各自发生的概率的累加和。

在有了上面两个Bound的储备之后,我们将目光看向一个分类器,对于一个分类器,当其在对测试集中的O1、O2… On做分类的时候,将其分类误差变量定义为Xi,对于O1分类错误则Xi为1,否则为0。这个X其实就满足了伯努利分布,设其期望为p,意思就是每个Xi取1的概率为p,就是每个样本O1可能被分类错误的概率为p,这就是泛化误差errD。真实的误差可以理解为所有Xi的和,运用上面的Hoeffding Bound,实际取值Xi的累加和t,除以数量n后得到t/n,t/n偏离期望p的概率Pr是受到上界约束的,这样子就将训练误差errS和泛化误差errD联系起来。

上面针对一个分类器h的结论是,在一个数据集上其「训练误差」大于「理论误差+偏移 α \alpha α」的概率Pr是小于一个上界的,我们将其中的偏移 α \alpha α换成要证明公式的约束项,就得到了下面绿色的表示形式,这还是一个分类器的结论,其描述的是,泛化误差大于训练误差加一个偏移量 α \alpha α,这个"bad event"的概率Pr,是不高于某个值的。运用Union Bound,当classifier set中所有分类器都考虑进来以后,它们总体发生“bad event”的概率Pr就小于一个值 δ \delta δ,反过来说,也就是最终要证明的,有 1 − δ 1-\delta 1−δ的概率,泛化误差errD<=训练误差errS- α \alpha α。

相关习题

习题1: 求给定样本下的GINI系数

习题2:
这道习题证明了如何在一个序数属性A上,以O(NlogN)的时间复杂度找到最佳分割点,核心思想就是枚举所有可能的分割值a,先通过排序算法将数据S按照属性A升序排列,然后从左到右一趟遍历,统计所有计算GINI的指标。

数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论相关推荐

  1. R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)

    R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录

  2. 数据挖掘十大算法之分类算法(决策树模型)

    文章目录 1. 决策树的概念 2. 构建决策树 3. 决策树中的信息论原理 3.1 信息量 3.2 熵 3.3 分类集合信息量 3.4 信息增益 接上篇文章分类介绍及评价指标我们讨论了分类算法中,分类 ...

  3. 数据挖掘中分类算法小结

    数据挖掘中分类算法小结   数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势 ...

  4. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )

    文章目录 I . 分类概念 II . 分类 ( 离散值 ) 和 预测 ( 连续值 ) III . 分类过程 IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) V . 数据预处理 ...

  5. (二) 数据挖掘之分类

    一.分类的主要思想 分类是一种重要的数据分析形势,它提取刻画重要数据类的模型.这种模型称为分类器,预测分类(离散的.无序的)类标号. 例如:可以建立一个分类模型,把银行贷款申请划分成"安全& ...

  6. 数据挖掘(三) 决策树

    数据挖掘(三) 决策树 1.决策树 概述 决策树(Decision Tree)算法是一种基本的分类与回归方法,是最经常使用的数据挖掘算法之一.我们这章节只讨论用于分类的决策树. 决策树模型呈树形结构, ...

  7. 【机器学习】sclearn分类算法-决策树、随机森林

    分类算法-决策树.随机森林 1.决策树 1.1 认识决策树 1.2 信息论基础-银行贷款分析 1.3 决策树的生成 1.4 决策树的划分依据之一-信息增益 1.5 sklearn决策树API 1.6 ...

  8. sklearn分类算法-决策树、随机森林

    sklearn分类算法-决策树.随机森林 一.决策树 1.概念 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 比如: ...

  9. 分类算法-决策树、随机森林

    分类算法-决策树.随机森林 决策树 1. 认识决策树 决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合.在决策树的结构中,每一个实例都被一条路 ...

最新文章

  1. Spring注解 开发
  2. 如何兼容並蓄Android Studio 與 Eclipse 的優點, 減少顧此失彼的缺憾
  3. 全局程序集缓存gac中安装程序集_我就不信2W字把源码拆的这么碎,你还不明白mybatis缓存...
  4. MSTAR GAMMA
  5. Spring Security——基于读写锁的动态权限配置FilterInvocationSecurityMetadataSource实现类
  6. 深度学总结:RNN训练需要注意地方:pytorch每一个batch训练之前需要把hidden = hidden.data,否者反向传播的梯度会遍历以前的timestep
  7. 如何将usb连接到远程计算机,远程服务器怎么共享usb
  8. lda主题词评论python_Python之酒店评论主题提取LDA主题模型
  9. i9100美化android.policy.jar,摆脱越狱束缚 三星I9100安装应用更轻松
  10. 电力系统服务器故障预案,电网预案推演系统及电网预案推演方法
  11. ext列表禁止滑动_后台列表设计避坑指南(下)
  12. Android Studio用不了jar
  13. 使用youtube语音识别功能给视频加自动字幕
  14. 如何做好手机APP测试?APP测试流程及解决方案
  15. PS文字的投影怎么打?
  16. 淘宝网站的设计与排版
  17. 计算机语言安装不上,安装程序包的语言不受系统支持该怎么办?解决方法教程...
  18. 东莞潇洒老师:分享PROE产品设计塑胶产品结构基本设计
  19. 来谈谈股民们的抄底问题,正确的短线交易是怎么玩的?活在市场里
  20. 西门子博图PLC程序无法下载到PLCSIM

热门文章

  1. Android 下拉刷新框架实现
  2. android下拉框代码,Android下拉列表spinner的实例代码
  3. 微信小程序导航头部吸顶效果
  4. 为什么创业的人都爱跑步
  5. Linux设备驱动子系统第二弹 - SD卡
  6. 面试题:什么是野指针?产生野指针的原因?
  7. 基于《高级计算机图形学原理与实践》(西安科技大学)的学习笔记(一、二)
  8. Java 文件压缩及下载
  9. 编程语言排行榜2021年3月
  10. UART、SPI、I2C串行通讯协议解释 同步/异步 全双工/半双工通信含义