Q-Q图
来自:https://mp.weixin.qq.com/s/_UTKNcOgKQcCogk2C2tsQQ

正负样本数据集符合独立同分布是构建机器学习模型的前提,从概率的角度分析,样本数据独立同分布是正负样本数据从某一定的数据分布随机抽取的,且正负样本的分布是不一样的。举例来说,若我们用非洲的西瓜作为训练集,然后用中国西瓜作为测试集,则数据集可能不满足同分布这一前提;抛硬币是最简单的独立同分布;用专业术语举例,若数据集符合正态分布,测试集符合均匀分布,那么数据集不满足独立同分布这一前提。
本文用Q-Q分析不同数据集是否为同一分布,且可以用Q-Q图验证数据集是否符合正太分布。
一、累积分布函数与分位数
累积分布函数(CDF,Cumulative Distribution Function),是概率累积的过程。对某一变量X取值x,则x的累积分布函数是所有小于x值得概率相加,公式如下:
F(x) = P{X ≤ x}
分位数(quantile)也是一种概率累计过程,如第一四分位数是累计概率达到0.25时所对应的变量值,第二四分位数是累计分布概率达到0.5时所对应的值,第三四分位数是累计分布概率达到0.75时所对应的值,公式如下:α代表累计概率所对应的变量值,分位数Zα
P(X ≤ Zα) = α;
二、Q-Q图定义
Q-Q图是一种散点图,横坐标为某一样本的分位数,纵坐标为另一样本的分位数,横坐标与纵坐标组成的散点图代表同一个累计概率所对应的分位数。若散点图在直线 y = x 附近分布,则这两个样本是同等分布;若横坐标样本为标准分布且散点图在 y = x 附近分布,则纵坐标样本符合正太分布,且直线斜率代表样本标准差,截距代表样本均值。

如上图左上角图为某一数据的累计概率分布函数,右上角为标准正态分布的累计概率分布函数,对两图取同一累计概率对应的分位数,绘制散点图,由图可知,数据符合正态分布,斜率和截距分别代表数据的标准差和均值。
Q-Q图中正态分布直线推导:
若数据x是正态分布的,那么f(x)是一个正态分布的概率密度,根据正态分布的特性,数据x对应的标准正态分布函数的概率密度函数:其中m为样本均值,std为样本标准差
y = f((x - m) / std)
横坐标的数据分布是标准正态分布,概率密度函数为f(n),由QQ图定义可知两者一一对应的,因此有:
(x - m) / std = n;即 x = n*std + m
所以直线的斜率代表标准差,截距代表均值。
三、构建普通Q-Q图
普通Q-Q图用于评估两个数据集的分布的相似程度,如上节所说的,若散点图在直线 y = x 附近,则两个数据集的分布类似。普通Q-Q图与正态Q-Q图的不同点在于普通Q-Q图的横坐标是未知数据集的分位数,正态Q-Q图的横坐标是标准正态分布的分位数,其他步骤都一样。

由上图可知,散点图没有接近一条直线,因此数据集1和数据集2来自不同的分布集。
Q-Q图的更多相关文章
- Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转
原文地址 转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...
- ruby 中%Q %q %W %w %x %r %s的用法
%Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: "Fr ...
- [Ruby]转载: 关于ruby中 %Q, %q, %W, %w, %x, %r, %s 的用法
单引号内的内容,ruby会原样输出 双引号内的内容,ruby会解析 我们看个简单的例子,针对字符串 #{foo}test 我们分别用单引号核双引号操作 '#{foo}test' ...
- C# 实现list=list.OrderBy(q=>q.字段名).ToList(); 按多个字段排序
//倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...
- [CF1051F]The Shortest Statement (LCA+最短路)(给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路)
题目:给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路 n≤100000,m≤100000,m-n≤20. 首先看到m-n≤20这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们 ...
- Q - Marriage Match IV (非重复最短路 + Spfa + 网络最大流Isap)
Q - Marriage Match IV Do not sincere non-interference. Like that show, now starvae also take part in ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- angularjs 1.x $q模块使用
什么是$q $q是angularjs1.x中内置服务,在需要使用时可以注入它. angular.module('app').controller('myController', function my ...
- [Node.js] Promise,Q及Async
原文地址:http://www.moye.me/2014/12/27/promise_q_async/ 引子 在使用Node/JS编程的时候,经常会遇到这样的问题:有一连串的异步方法,需要按顺序执行, ...
- Q查询
一.Complex lookups with Q objects(Q对象的复杂查询) 仅仅靠单一的关键字参数查询已经很难满足查询要求.此时Django为我们提供了Q查询: class Q 1.Q对象( ...
随机推荐
- GoldenGate 12.3 MA架构介绍系列(4)–Restful API介绍
OGG 12.3 MA中最大的变化就是使用了restful api,在前面介绍的各个服务模块,其实就是引用restful api开发而来,这些API同时也提供对外的集成接口,详细接口可参考: http ...
- MyEclipse中项目运行时发生了Tomcat报错:[java.lang.OutOfMemoryError: PermGen space]
Tomcat内存溢出,异常信息如下: 十一月 26, 2017 1:52:26 下午 org.apache.catalina.core.ContainerBase$ContainerBackgroun ...
- JavaScript笔记 #07# 用js写算法
算法盒子初代(为了提高学习算法的热情...) 效果图: 所有代码放在单个html中: <!DOCTYPE html> <html> <head> <meta ...
- selenium得到弹出窗口
# 获取当前的页面窗口 first_handle = brower.current_window_handle handles = brower.window_handles for i in han ...
- pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
安装工具:Pycharm 专业版2017.3PyQT5python3 pyqt5-tools 设置扩展工具的参数找到setting->tools->external tools,点击加号新 ...
- powermockito 常用操作
1:Mock带参数的静态方法 PowerMockito类 package org.powermock.api.mockito; CityCodeBean cityCodeBean = CityCode ...
- es修改数据类型
环境:es版本:6.5.0 es创建好了mapping后是不允许修改字段类型的,要是我们想修改字段类型怎么办呢,我们可以采用reindex的方法实现,就是创建一个新的mapping,里面的字段类型按照 ...
- (4opencv)OpenCV PR 成功的收获和感悟
2018-09-12,第一次对OpenCV PR成功 https://github.com/opencv/opencv/pull/12206 <find innercircle of cont ...
- java常用类-StringBuffer,Integer,Character
* StringBuffer: * 线程安全的可变字符串. * * StringBuffer和String的区别? * 前者长度和内容可变,后者不可变. * 如果使用前者做字符串的拼接,不会浪费太多的 ...
- poj 1159 Palindrome - 动态规划
A palindrome is a symmetrical string, that is, a string read identically from left to right as well ...