机器学习读书笔记:假设检验(二)
文章目录
- t检验
- 卡方检验
- Friedman检验
- Nemenyi后续检验
- 偏差与方差
之前的一篇关于假设检验的文章主要是针对一个学习算法的假设检验。在真是工作环境中,很多情况下,我们都是想比较两个学习算法到底哪个更好。或者用概率的思路来说,学习算法A比学习算法B更好的机率有多大?
这一篇接着上一篇来讲一讲这个问题。
t检验
上一篇也提到了t检验。这里把单算法的假设:μ=ϵ0\mu = \epsilon_0μ=ϵ0改成 μA=μB\mu_A = \mu_BμA=μB,也就是假设两个学习算法的错误率均值相同。
那么跟着上一篇文章的结论,如果t检验公式计算值≤ϵ0\leq \epsilon_0≤ϵ0,那么表示在1−α1-\alpha1−α的置信度下,两个学习期的平均错误率μA\mu_AμA、μB\mu_BμB差不多的假设成立。
卡方检验
卡方检验也是针对两个学习算法比较的假设检验。
卡方检验和t检验一样,是通过构造一个服从卡方分布(χ2\chi^2χ2)的统计量来计算某种假设的概率。在讲卡方检验之前,首先要讲另外的一个概念:列联表。
针对二分类问题,有两个学习算法A和学习算法B,可以把所有的测试集样本划分成四种情况:
- 两个学习算法都分类正确的样本数目e00e_{00}e00
- 两个学习算法都分类错误的样本数目e11e_{11}e11
- A学习算法分类正确,B学习算法分类错误的数目e01e_{01}e01
- A学习算法分类错误,B学习算法分类正确的数目e01e_{01}e01
针对这四个数字,列出一张列联表:
如果我们做出假设两个算法的性能相同,还是以错误率来衡量,那么我们的假设就是:ϵA=ϵB\epsilon_A = \epsilon_BϵA=ϵB。通过这个列联表的数目来看,如果两个算法的错误率相同,那么可以知道:e01=e10e_{01} = e_{10}e01=e10。也就是说我们可以把假设改成:e01=e10e_{01} = e_{10}e01=e10。
所以我们可以构造统计量X=e01−e10X=e_{01}-e_{10}X=e01−e10,然后再构造统计量τχ2=(∣e01−e10−1∣)2e01+e10\tau_{\chi^2} = \frac{(|e_{01}-e_{10}-1|)^2}{e_{01}+e_{10}}τχ2=e01+e10(∣e01−e10−1∣)2,这个统计量是服从卡方χ2\chi^2χ2分布的。此时的自由度k=1k=1k=1。(我理解的自由度就是类别数减一)
卡方检验也有一张查询表:
从表中看出,自由度为1的情况下,如果显著性水平α=0.05\alpha = 0.05α=0.05,也就是置信度为95%的情况下,临界值为3.841。换句话说就是上面的卡方值τχ2≤3.841\tau_{\chi^2} \leq 3.841τχ2≤3.841的话,我们的假设e01=e10e_{01} = e_{10}e01=e10成立的概率为95%,也就是说两个学习算法性能相同的的概率是95%。
Friedman检验
回头看看前面几种检验方法:
- t检验可以检验单个算法在某个数据集上的测试指标是否可以代表整体
- t检验改造一下可以检验两个算法在某个数据集上的测试测试指标是否相同
- 卡方检验也是可以检验两个算法在某个数据集上的测试测试指标是否相同
在实际工作中,通常是会使用到多个数据集,使用多个算法去进行尝试,试图获得最好的算法。那么此时如何比较哪个算法最好(不是由某种抽烟误差导致),就需要使用更牛逼的检验方法了。当然也可以在某一个数据集上对算法进行两两比较,然后再换数据集进行两两比较,但是这种方法太笨拙了。这时候就可以用F检验(Friedman检验,油炸男?)方法了。
假设有kkk个算法在NNN个数据集上来做比较。假设在数据集DjD_jDj上,k个算法存在k个指标(以错误率为例),将这些指标从高到低排序(假设都不一样):ϵ1,ϵ2...ϵk\epsilon_1, \epsilon_2...\epsilon_kϵ1,ϵ2...ϵk,称作算法序值。
我们可以做出假设:k个算法的性能基本相同。
表 1
数据集 | 算法A | 算法B | 算法C |
---|---|---|---|
D1 | 1 | 2 | 3 |
D2 | 1 | 2.5 | 2.5 |
D3 | 1 | 2 | 3 |
D4 | 1 | 2 | 3 |
平均序值 | 1 | 2.125 | 2.875 |
然后设统计变量rir_iri为第iii个算法的平均序值。rir_iri的序值为(k+1)/2(k+1)/2(k+1)/2,因为所有的序值(N个数据集,k个算法)相加就是N(k+1)/2N(k+1)/2N(k+1)/2,那么平均值就是(k+1)/2(k+1)/2(k+1)/2,方差为(k2−1)/12(k^2-1)/12(k2−1)/12。
rir_iri服从正态分布(什么中心极限定理,不去研究了,大佬说服从就服从)。所以再构造统计变量:
τχ2=k−1k∗12Nk2−1∑i=1kri−(k+12)2①=12Nk(k+1)∗∑i=1k(ri2−k(k+1)24)②\tau_{\chi^2} =\frac{k-1}{k}*\frac{12N}{k^2-1}\sum_{i=1}^k{r_i-(\frac{k+1}{2})^2} ① \\ =\frac{12N}{k(k+1)}*\sum_{i=1}^k{({r_i}^2-\frac{k(k+1)^2}{4})} ② τχ2=kk−1∗k2−112Ni=1∑kri−(2k+1)2①=k(k+1)12N∗i=1∑k(ri2−4k(k+1)2)②
这个随机变量是服从χ2\chi^2χ2分布的,从①式可看出来。然后再构造一个随机变量(不知道为啥要怎么搞,听大佬的)
τF=(N−1)τχ2N(k−1)−τχ2\tau_F=\frac{(N-1)\tau_{\chi^2}}{N(k-1)-\tau_{\chi^2}} τF=N(k−1)−τχ2(N−1)τχ2
然后,这么个随机变量τF\tau_FτF服从的分布就是自由度为k−1k-1k−1和(k−1)(N−1)(k-1)(N-1)(k−1)(N−1)的F分布,F分布有两个自由度。同样,F分布有临界值表格:
这里的含义也是相同的,如果τF\tau_FτF计算得到的值小于某个临界值,比如2.250,那么就是说,在数据集为4,算法个数为10的情况下,有95%的置信度,这些算法的性能是相同的。
这里存在一个问题,就是说,如果计算得出,这些算法在95%的置信度下,τF\tau_FτF的值大于了2.250,那么表示在数据集为4,算法个数为10的情况下,这些算法的性能是有差异的,上面提出的假设不成立。那么问题来了,哪个算法好一些呢?
Nemenyi后续检验
在Nemenyi检验中,引入一个新的临界值:
CD=qαk(k+1)6NCD = q_{\alpha}\sqrt{\frac{k(k+1)}{6N}} CD=qα6Nk(k+1)
如果两个算法的平均序值rAr_ArA、rBr_BrB的差值小于这个邻接值,那么表示这两个算法之间没有明显的差异,如果有,平均序值小的那个算法更牛逼。
根据表1可以画出下面这个图:
把算法的平均序值rir_iri在图上画一个圆点,然后在圆点两边延长Nemenyi临界值CD的长度。如果不同算法代表的线段有重复的部分,那么就是没有明显的差异,如果没有重复的,左边线段代表的算法就更牛逼一点。
偏差与方差
这里主要有几个概念需要好好捋一下:噪声、偏差、方差、偏差。
在说这几个值之前,又要先提到三个标记值:
有一个测试样本数据xxx,那么
- yyy为测试数据样本的真实标记,也就是这个样本真正属于哪一类。
- f(x,D)f(x, D)f(x,D)表示学习算法在训练集D上训练之后,对测试样本的输出值。书上是写的期望预测f(x)‾\overline{f(x)}f(x),也就是平均值。
- yDy_DyD表示在测试集中,样本xxx的标记值。
有了上面几个概念之后,再来看下面几个差值(不是书上的公式证明,写的是我的理解)
误差:首先讲误差,误差是学习算法对测试样本的输出值与标记值的区别。也就是说学习后,算法对数据样本的拟合程度怎么样。书上通过公式换算可知误差由偏差+方差+噪声组成。
偏差:指的是预测值与真实值之间的区别,也就是f(x,D)f(x,D)f(x,D)与yyy之间的区别。这个是衡量一个学习算法是否准确的指标。
方差:指的是每个预测值与平均预测值之间的偏差,如果方差较大,表示学习算法的抖动很大,一下天上,一下地上的感觉。
噪声:表示标记值与真实值之间的区别,因为精度等各种各样的问题,难免有点差距。
偏差-方差窘境:刚开始训练时,误差主要偏差导致,因为还没有学习到训练集样本的具体分布情况。当训练集足够多的时候,学习算法基本能拟合当前的训练集了,误差就基本由偏差导致。这是因为太拟合当前的训练集了,只要来一个稍微偏离拟合曲线的数据,就会造成很大的方差,从而导致误差。
机器学习读书笔记:假设检验(二)相关推荐
- scikit-learn机器学习 读书笔记(二)
第4章 特征提取 在前面的例子中,我们实际上使用了真实数据(线性回归)与样本距离(KNN)来作为机器学习时的特征,简言之,机器学习的核心是从各种特征中进行学习进而归纳规律.在本章接下来的部分,我们将学 ...
- 机器学习读书笔记(二)
By RaySaint 2011/06/17 概念学习和归纳偏置 感觉概念学习现在提得很少,可能是因为在机器学习的实际应用中很少用到,但是从概念学习中很容易引出归纳偏置的概念,而归纳偏置是个很重要的概 ...
- Bishop 模式识别与机器学习读书笔记_ch1.1 机器学习概述
模式识别与机器学习-读书笔记 第一章 机器学习概述(I) 数据模式搜索问题是一个基础性的问题,有着悠久而成功的历史. 16世纪对第谷布拉赫的广泛天文观测使约翰内斯开普勒发现了行星运动的经验定律,从而为 ...
- ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ
ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx) 一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...
- Linux设备驱动程式之读书笔记(二) [转]
http://www.sudu.cn/info/html/edu/code/20070102/286543.html setlevel.c 非常实用 google 查找 #define _syscal ...
- 重构(Refactoring)技巧读书笔记 之二
重构(Refactoring)技巧读书笔记 之二<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...
- 机器学习入门笔记(二):线性模型
文章目录 一.基本形式 二.线性回归 2.1 离散属性连续化 2.2 最小二乘法 2.3 多元线性回归 2.4 广义线性模型 三.对数几率回归(逻辑回归) 3.1 最大似然估计 四.线性判别分析(LD ...
- 机器学习课堂笔记-作业二基本实现思路
机器学习课堂笔记-作业二基本实现思路 作业2-年收入判断 项目描述 数据集介绍 项目要求 数据准备 环境配置/安装 事先说明 一.概率生成模型 1. 读取数据 整理训练数据 2. 协方差矩阵计算 手动 ...
- 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程
上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...
- C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存
layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...
最新文章
- 送你一份 Nginx 最佳入门手册
- PyQt5学习--基本窗口控件--QMainWindow
- 敏捷 - #7 原则:工作软件是进度的主要衡量标准 ( #7 Agile - Principle)
- VS2010打开就自动关闭问题解决
- 解除百度文库复制限制
- 绘制可视化报表技巧,免费报表工具必备!
- 使用EXCEL画图的简要方法
- 级联阴影贴图(CSM)
- AutoCAD安装及激活
- msrcr图像增强算法 matlab,图像处理之Retinex增强算法(SSR、MSR、MSRCR)
- Java入门基本数据类型(羊驼)
- texstudio使用
- linux中 不在sudoers文件中此事将被报告
- 度量空间,赋范空间,內积空间,希尔伯特空间
- hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability
- 5.22 使用粗糙化命令制作电击效果 [Illustrator CC教程]
- MATLAB算法实战应用案例精讲-【人工智能】SLAM(概念篇)
- 深度学习(二)向量化 Logistic 回归及其梯度输出
- 安全测试——验证日志文件
- 文件上传的http请求类(zip文件)