【机器学习】QQ-plot深入理解与实现
QQ-plot深入理解与实现
最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot。Sigh!我承认我是第一次见到这个名词,异常陌生。维基百科给出了如下定义:
“在统计学中,QQ-plot(Q代表分位数Quantile)是一种通过画出分位数来比较两个概率分布的图形方法。首先选定区间长度,点(x,y)对应于第一个分布(x轴)的分位数和第二个分布(y轴)相同的分位数。因此画出的是一条含参数的曲线,参数为区间个数。如果被比较的两个分布比较相似,则其QQ图近似地位于y=x上。如果两个分布线性相关,则QQ图上的点近似地落在一条直线上,但并不一定是y=x这条线。QQ图同样可以用来估计一个分布的位置参数。”
这段话刚开始看的时候,的确不是很清楚,难以理解。我也在网上找了一些资料,最有用的当属网上的一本在线电子书《Online Statistics
Education: An Interactive Multimedia Course of Study》,里面的Chanpter8专门有讲解QQ-plot。本文中主要借鉴了这门书中的内容,以更浅显易懂的语言来讲清楚QQ-plot,我学习的过程中也用Matlab做了一些试验,文中将代码一并附上。
QQ-plot其实是Quantile-Quantile Plot的缩写,Quantile分位现在理解没有关系,看到最后你就会理解它的意思了。QQ-plot的目的是什么呢?是为了验证两组数据的分布是否相同或者相似,因此在实际中很多情况都会用到。为了讲清楚QQ-plot,我们先来介绍另外两种以图形的方式评价数据分布情况的方法:直方图(histogram)和 经验累积分布函数(empirical cumulative distribution
function, eCDF)。
我们考虑一个随机变量X服从[0,1]区间内均匀分布,我们任取n个数据{ x1,x2...,xnx1,x2...,xn }。本例中n=100,直方图频率分布如图1所示。直方图的概率分布与bins的个数有关(bins为10,5,3)。不同的bins对应的图形也不同,图bins=10的时候还呈现锯齿状,但是bins=3的时候就趋于平稳,所以根据直方图来看累积分布不是很靠谱。随后,我们又使用eCDF对数据进行分析,如图2所示。黄色部分即为eCDF与理论CDF的误差,根据大数定理,当n取值越大,误差越小。

图1. 直方图统计

图2. eCDF vs 理论CDF
相关代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
data%生成100个再[0,1]均匀分布的随机数figuresubplot(3,1,1);hist(data,10);%bins=10xlabel('x');ylabel('Frequency');subplot(3,1,2);hist(data,5);%bins=5xlabel('x');ylabel('Frequency');subplot(3,1,3);hist(data,3);%bins=3xlabel('x');ylabel('Frequency');theory_y=data;figure[F,X]=ecdf(data);%ECDFplot(X,F,'-k','LineWidth',3);holdplot(data,theory_y,'-b','LineWidth',3);legend('Empirical,'Theoretical,2);hold%------两曲线之间填充颜色-------theory_y=sort(theory_y);theory_y=[theory_y(1);theory_y];%Note:100数据进行ECDF会产生101个数的ECDF坐标,因此为了填充颜色,这里更改theory_y的维数fill([X',fliplr(X')],[theory_y',fliplr(F')],'y');xlabel('x');ylabel('F(x)'); |
好了,到现在开始要说QQ-plot了。我们用如下两个例子来说明:QQ-plot for 平均分布 & QQ-plot for 正态分布。
QQ-plot for 平均分布:
Sample中有n个数据, x1,x2,...,xnx1,x2,...,xn 。我们首先对数据进行排序,使之满足 x1<x2<...<xnx1<x2<...<xn 。我们将x所在区间[0,1]进行n等分。即变为 [0,1n],(1n,2n],...,(n−1n,1][0,1n],(1n,2n],...,(n−1n,1]n个自区间。为了符合平均分布,我们期望第q个数据的值坐落在第q个子区间的中间值,也就是
现在我们可以理解Quantile-Quantile(q-q) Plot了,第1个Q是Data Sample的分位即 x1,x2,...,xnx1,x2,...,xn ;第2个Q便是期望 EqEq 。因此QQ-plot其实就是n个点的集合
因此在QQ-plot for平均分布中,当QQ点越接近y=x时,那么数据越接近平均分布。下面我们考虑表1中的5组数据,以及随机生成50个,500个,1000个数据的QQ-plot图,如图3所示。可以看出,当sample size越大,QQ-plot越接近y=x。
表1. Computing the Expected Quantile Values.
| Data (x) | Rank (q) |
Middle of the qth Interval |
|---|---|---|
|
0.03 0.24 0.41 0.59 0.67 |
1 2 3 4 5 |
0.1 0.3 0.5 0.7 0.9 |

图3. QQplot for uniform data
相关代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
A=[0.03,0.24,0.41,0.59,0.67];B=unifrnd(0,1,1,50);C=unifrnd(0,1,1,500);D=unifrnd(0,1,1,1000);subplot(2,2,1);gqqplot(A,'unif');title('Sample);subplot(2,2,2);gqqplot(B,'unif');title('Sample);subplot(2,2,3);gqqplot(C,'unif');title('Sample);subplot(2,2,4);gqqplot(D,'unif');title('Sample); |
QQ-plot for 正态分布:
这个就简单了,跟上面是一样的道理。我们取Z为标准的正态分布, μ=0,σ=1μ=0,σ=1 。现将n个数据进行排序,再做出相应的QQ-plot点的集合
同样我们给出了表2,5组正态分布的数据以及其相应的期望值。为了比较,我们也随机产生了n为50,500,1000的正态分布随机数进行QQ-plot,如图4所示。
表2. Computing the expected quantile values for normal data.
| Data (z) | Rank (q) |
Middle of the qth Interval |
Normal(q) |
|---|---|---|---|
|
-1.96 -.78 .31 1.15 1.62 |
1 2 3 4 5 |
0.1 0.3 0.5 0.7 0.9 |
-1.28 -0.52 0.00 0.52 1.28 |

图4. QQplot for normal data
代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
E=[-1.96,-0.78,0.31,1.15,1.62];F=randn(1,50);G=randn(1,500);H=randn(1,1000);subplot(2,2,1);gqqplot(E,'norm');title('Sample);subplot(2,2,2);gqqplot(F,'norm');title('Sample);subplot(2,2,3);gqqplot(G,'norm');title('Sample);subplot(2,2,4);gqqplot(H,'norm');title('Sample); |
好吧,到此为止,讲的差不多了,其实不难的。最后我们再来看一遍维基百科上对QQ-plot的定义:
“在统计学中,QQ-plot(Q代表分位数Quantile)是一种通过画出分位数来比较两个概率分布的图形方法。首先选定区间长度,点(x,y)对应于第一个分布(x轴)的分位数和第二个分布(y轴)相同的分位数。因此画出的是一条含参数的曲线,参数为区间个数。如果被比较的两个分布比较相似,则其QQ图近似地位于y=x上。如果两个分布线性相关,则QQ图上的点近似地落在一条直线上,但并不一定是y=x这条线。QQ图同样可以用来估计一个分布的位置参数。”
Sigh!应该理解了... 关于gqqplot函数的使用,请参考 http://ackjack.com/?p=56
【机器学习】QQ-plot深入理解与实现的更多相关文章
- GWAS: 曼哈顿图,QQ plot 图,膨胀系数( manhattan、Genomic Inflation Factor)
画曼哈顿图和QQ plot 首推R包“qqman”,简约方便.下面具体介绍以下. 一.画曼哈顿图 install.packages("qqman") library(qqman) ...
- 机器学习(四):通俗理解支持向量机SVM及代码实践
上一篇文章我们介绍了使用逻辑回归来处理分类问题,本文我们讲一个更强大的分类模型.本文依旧侧重代码实践,你会发现我们解决问题的手段越来越丰富,问题处理起来越来越简单. 支持向量机(Support Vec ...
- Python机器学习笔记:深入理解Keras中序贯模型和函数模型
先从sklearn说起吧,如果学习了sklearn的话,那么学习Keras相对来说比较容易.为什么这样说呢? 我们首先比较一下sklearn的机器学习大致使用流程和Keras的大致使用流程: skl ...
- 机器学习入门 一、理解机器学习+简单感知机(JAVA实现)
首先先来讲讲闲话 如果让你现在去搞机器学习,你会去吗?不会的话是因为你对这方面不感兴趣,还是因为你觉得这东西太难了,自己肯定学不来?如果你觉的太难了,很好,相信看完这篇文章,你就会有胆量踏入机器学习这 ...
- 菜鸟之路——机器学习之决策树个人理解及Python实现
最近开始学习机器学习,以下会记录我学习中遇到的问题以及我个人的理解 决策树算法,网上很多介绍,在这不复制粘贴.下面解释几个关键词就好. 信息熵(entropy):就是信息不确定性的多少 H(x)=-Σ ...
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...
- ViewPager+Fragment的结合使用,实现QQ界面的理解
http://www.cssxt.com/html/2449/2449.html 效果如图: 实现代码解析:MainActivity.java1.引入布局文件2.4个标题控件的初始化以及点击事件的监听 ...
- 菜鸟之路——机器学习之非线性回归个人理解及python实现
关键词: 梯度下降:就是让数据顺着梯度最大的方向,也就是函数导数最大的放下下降,使其快速的接近结果. Cost函数等公式太长,不在这打了.网上多得是. 这个非线性回归说白了就是缩小版的神经网络. py ...
- 菜鸟之路——机器学习之线性回归个人理解及Python实现
这一节很简单,都是高中讲过的东西 简单线性回归:y=b0+b1x+ε.b1=(Σ(xi-x–)(yi-y–))/Σ(xi-x–)ˆ2 b0=y--b1x- 其中ε取 为均值为0的正态 ...
随机推荐
- httpClient请求响应延迟
客户端可以先向服务器端发送一个请求,如果服务器端返回的是状态码100,那么客户端就可以继续把请求体的数据发送给服务器端.这样在某些情况下可以减少网络开销. 再看看HttpClient里面对100-Co ...
- 题解 [51nod1771] 最小生成树中的边
题面 解析 这题好像没人写过啊(所以好像没题解)... 然后刚了一天才写出来摆了半天. 其实一开始是想错了, 写了个\(O(n^2)\)的近似于暴力的方法. 就是对于每组权值相等的边, 对于每条边先把 ...
- MFC 类内线程函数
线程函数必须是全局函数或静态成员函数. 非静态成员函数都有一个隐含的参数用于接收所属类的this指针,一般情况下调用时参数不匹配.所以static可以干掉隐含的参数. 但是没有了this,类内的函数就 ...
- Visual Stdio的使用
以下基于vs2017版本 part 1: 问题及解决 1.命令窗口一闪而过 右键项目,选择属性--连接器---系统---子系统---选择控制台. 2.修改默认启动项目 右键解决方案,选择属性,选择当前 ...
- H5页面测试总结
前言 在最近几个项目中,小编接触了较多关于H5页面的测试,H5页面的测试除了业务逻辑功能测试外,其他部分的测试方法基本是可以通用的,在此对H5页面的一些通用测试方法进行总结分享给大家. H5页面介绍 ...
- JVM(十一),垃圾回收之老年代垃圾收集器
十一.垃圾回收之老年代垃圾收集器 1.Serial Old收集器(标记整理算法-单线程-Client模式下) 2.Paraller Old收集器(标记整理算法-多线程-) 3.CMS收集器(标记清除算 ...
- 小米oj 有多少个等差数列(动态规划)
有多少个等差数列? 序号:#20难度:困难时间限制:500ms内存限制:10M 描述 等差数列是常见数列的一种,如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列就叫做等差数列, ...
- Python基础之基本数据类型的总结
基本数据类型的总结 1. 按照存储空间的占用分(从低到高) 数字 字符串 集合:无序,即无序存索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存索引相关信息,可变,需要处理数据的 ...
- jQuery属性操作之html属性操作
jQuery的属性操作, 是对html文档中的属性进行读取.设置和移除操作.比如,attr(). removeAttr(). 1. attr() attr()可以设置属性值或者返回被选元素的属性值 1 ...
- codeforces#1159D. The minimal unique substring(打表找规律+构造)
题目链接: https://codeforces.com/contest/1159/problem/D 题意: 构造一个长度为$n$的$01$串,最小特殊连续字串的长度为$k$ 也就是,存在最小的$k ...