来自: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图的更多相关文章

  1. Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转

    原文地址  转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...

  2. ruby 中%Q %q %W %w %x %r %s的用法

    %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: "Fr ...

  3. [Ruby]转载: 关于ruby中 %Q, %q, %W, %w, %x, %r, %s 的用法

    单引号内的内容,ruby会原样输出 双引号内的内容,ruby会解析 我们看个简单的例子,针对字符串      #{foo}test     我们分别用单引号核双引号操作 '#{foo}test'   ...

  4. C# 实现list=list.OrderBy(q=>q.字段名).ToList(); 按多个字段排序

    //倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...

  5. [CF1051F]The Shortest Statement (LCA+最短路)(给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路)

    题目:给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路 n≤100000,m≤100000,m-n≤20. 首先看到m-n≤20这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们 ...

  6. Q - Marriage Match IV (非重复最短路 + Spfa + 网络最大流Isap)

    Q - Marriage Match IV Do not sincere non-interference. Like that show, now starvae also take part in ...

  7. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

  8. angularjs 1.x $q模块使用

    什么是$q $q是angularjs1.x中内置服务,在需要使用时可以注入它. angular.module('app').controller('myController', function my ...

  9. [Node.js] Promise,Q及Async

    原文地址:http://www.moye.me/2014/12/27/promise_q_async/ 引子 在使用Node/JS编程的时候,经常会遇到这样的问题:有一连串的异步方法,需要按顺序执行, ...

  10. Q查询

    一.Complex lookups with Q objects(Q对象的复杂查询) 仅仅靠单一的关键字参数查询已经很难满足查询要求.此时Django为我们提供了Q查询: class Q 1.Q对象( ...

随机推荐

  1. ELK学习笔记之F5利用EELK进行应用数据挖掘系列(2)-DNS

    0x00 概述 很多客户使用GTM/DNS为企业业务提供动态智能解析,解决应用就近性访问.优选问题.对于已经实施多数据中心双活的客户,则会使用GSLB提供双活流量调度.DNS作为企业业务访问的指路者, ...

  2. postman5.0.2_0+postmanInterceptor0.2.22_0下载安装,可发送header头 cookie 参数

    Postman是chrome上一个非常好用的http客户端插件,可惜由于chrome安全的限制,发不出带cookie的请求.如果想要发送带cookie的请求,需要开启Interceptor 安装方法: ...

  3. Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    Spring Boot 2 (四):使用 Docker 部署 Spring Boot Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常 ...

  4. 讨论下python中全局变量的使用

    首先看一段代码: A = 0 B = [0] def fun1(A, B): A += 1 B[0] += 1 fun1(A, B) print 'after fun1 %d %s' % (A,B) ...

  5. python之面向对象的高级进阶

    一 .isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object ...

  6. centos install go

    https://golang.org/doc/install 一键安装 https://jamesnbr.wordpress.com/2017/10/18/golang-1-9-1-install-o ...

  7. MYSQL之MHA集群

    环境 manager 192.168.137.141 master1 192.168.137.144 master2 192.168.137.145 slave 192.168.137.141 vip ...

  8. 什么是ip地址,什么是私有地址

    ip地址链接:https://jingyan.baidu.com/article/f96699bbf23089894e3c1be7.html 私有地址链接:https://baike.baidu.co ...

  9. Django缓存系统

    在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...

  10. caffe中的若干问题

    找不到cublas....: 在/etc/ld.so.conf文件夹中新建cuda.conf,里面添加/usr/local/cuda/lib64,然后sudo /sbin/ldconfig -v. c ...