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对象( ...
随机推荐
- 利用yum搭建lamp环境并进一步创建博客
用yum搭建lamp环境 第一.安装apache yum -y install httpd 第二.安装mariadb Yum -y mariadb mariadb-server 第三.安装php Yu ...
- 分页的模块layui
//调用分页模块 var laypage = layui.laypage; //分页的配置项 laypage.render({ elem:"page",//(指向存放分页的容器,值 ...
- Spring MVC前传递和后端接收的参数名不一致处理方式
前端传递的变量和后端接收的变量名字不一致时,用注解@RequestParam来实现数据的传递 例如:@RequestParam(value="id") //实现商品的分类目录展现 ...
- Jquery部分小结
window.onload 必须等待网页中所有的内容加载完毕后(包括图片)才能执行,如果多个,只会执行最后一个;$(document).ready() 网页中所有DOM结构绘制完毕后就执行,可能DOM ...
- web项目错误—Java.util.ConcurrentMidificationException
源代码: Iterator<String> iterator = list.iterator(); synchronized(synObject) { while(iterator.has ...
- 笔面试复习(spring常用.jar包/事务/控制反转/bean对象管理和创建/springMVC工作原理/sql查询)
###spring常用jar包1.spring.jar是包含有完整发布模块的单个jar包.2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需要的类.3.o ...
- Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战
基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...
- Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件
0x00 概述 Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目.来源于谷歌BorgMon项目.现在最常见的Kubernetes容器管理系统中,通常会搭配Pro ...
- 禁止单个IP或ip段访问
//IP禁止判断接口,返回true则为找到 function checkIp($ip, $ipbanned) { $ipbannedFlag = false; if (!empty($ipbanned ...
- Python 自学基础(一)——元组 字典 文件操作
格式化输出 name = input("请输入你的名字:") age = input("请输入你的年龄:") msg = ''' -------------in ...