Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是正态分布?为何如此重要?终于有人讲明白了

什么是正态分布?为何如此重要?终于有人讲明白了

作者头像
IT阅读排行榜
发布于 2019-07-15 08:40:02
发布于 2019-07-15 08:40:02
34.4K00
代码可运行
举报
文章被收录于专栏:华章科技华章科技
运行总次数:0
代码可运行
导读:为什么正态分布如此特殊?为什么大量数据科学和机器学习的文章都围绕正态分布进行讨论?我决定写一篇文章,用一种简单易懂的方式来介绍正态分布。

机器学习的世界中,以概率分布为核心的研究大都聚焦于正态分布。本文将阐述正态分布的概率,并解释它的应用为何如此的广泛,尤其是在数据科学和机器学习领域,它几乎无处不在。

我将会从基础概念出发,解释有关正态分布的一切,并揭示它为何如此重要。

作者:Farhad Malik

译者:Monanfei

来源:AI科技大本营(ID: rgznai100)

▲1893年人类身高分布图,作者:Alphonse Bertillon

本文的主要内容如下:

  1. 概率分布是什么
  2. 正态分布意味着什么
  3. 正态分布的变量有哪些
  4. 如何使用 Python 来检验数据的分布
  5. 如何使用 Python 参数化生产一个正态分布
  6. 正态分布的问题

01 简短的背景介绍

  1. 首先,正态分布又名高斯分布
  2. 它以数学天才 Carl Friedrich Gauss 命名 正态分布又名高斯分布
  3. 越简单的模型越是常用,因为它们能够被很好的解释和理解。正态分布非常简单,这就是它是如此的常用的原因。 因此,理解正态分布非常有必要。

02 什么是概率分布?

首先介绍一下相关概念。

考虑一个预测模型,该模型可以是我们的数据科学研究中的一个组件。

  • 如果我们想精确预测一个变量的值,那么我们首先要做的就是理解该变量的潜在特性。
  • 首先我们要知道该变量的可能取值,还要知道这些值是连续的还是离散的。简单来讲,如果我们要预测一个骰子的取值,那么第一步就是明白它的取值是1 到 6(离散)。
  • 第二步就是确定每个可能取值(事件)发生的概率。如果某个取值永远都不会出现,那么该值的概率就是 0 。 事件的概率越大,该事件越容易出现。
  • 在实际操作中,我们可以大量重复进行某个实验,并记录该实验对应的输出变量的结果。
  • 我们可以将这些取值分为不同的集合类,在每一类中,我们记录属于该类结果的次数。例如,我们可以投10000次骰子,每次都有6种可能的取值,我们可以将类别数设为6,然后我们就可以开始对每一类出现的次数进行计数了。
  • 我们可以画出上述结果的曲线,该曲线就是概率分布曲线。目标变量每个取值的可能性就由其概率分布决定。
  • 一旦我们知道了变量的概率分布,我们就可以开始估计事件出现的概率了,我们甚至可以使用一些概率公式。至此,我们就可更好的理解变量的特性了。概率分布取决于样本的一些特征,例如平均值,标准偏差,偏度和峰度。
  • 如果将所有概率值求和,那么求和结果将会是100%

世界上存在着很多不同的概率分布,而最广泛使用的就是正态分布了。

03 初遇正态分布

我们可以画出正态分布的概率分布曲线,可以看到该曲线是一个钟型的曲线。如果变量的均值,模和中值相等,那么该变量就呈现正态分布。

如下图所示,为正态分布的概率分布曲线:

理解和估计变量的概率分布非常重要。

下面列出的变量的分布都比较接近正态分布:

  1. 人群的身高
  2. 成年人的血压
  3. 传播中的粒子的位置
  4. 测量误差
  5. 回归中的残差
  6. 人群的鞋码
  7. 一天中雇员回家的总耗时
  8. 教育指标

此外,生活中有大量的变量都是具有 x % 置信度的正态变量,其中,x<100。

04 什么是正态分布?

正态分布只依赖于数据集的两个特征:样本的均值和方差。

  • 均值——样本所有取值的平均
  • 方差——该指标衡量了样本总体偏离均值的程度

正态分布的这种统计特性使得问题变得异常简单,任何具有正态分布的变量,都可以进行高精度分预测。

值得注意的是,大自然中发现的变量,大多近似服从正态分布。

正态分布很容易解释,这是因为:

  1. 正态分布的均值,模和中位数是相等的。
  2. 我们只需要用均值和标准差就能解释整个分布。

正态分布是我们熟悉的正常行为。

05 为何如此多的变量都大致服从正态分布?

这个现象可以由如下定理解释:当在大量随机变量上重复很多次实验时,它们的分布总和将非常接近正态分布。

由于人的身高是一个随机变量,并且基于其他随机变量,例如一个人消耗的营养量,他们所处的环境,他们的遗传等等,这些变量的分布总和最终是非常接近正态的。

这就是中心极限定理

本文的核心:

我们从上文的分析得出,正态分布是许多随机分布的总和。如果我们绘制正态分布密度函数,那么它的曲线将具有以下特征:

如上图所示,该钟形曲线有均值为 100,标准差为1:

  • 均值是曲线的中心。这是曲线的最高点,因为大多数点都是均值。
  • 曲线两侧的点数相等。曲线的中心具有最多的点数。
  • 曲线下的总面积是变量所有取值的总概率。
  • 因此总曲线面积为 100%

更进一步,如上图所示:

  • 约 68.2% 的点在 -1 到 1 个标准偏差范围内。
  • 约 95.5% 的点在 -2 到 2 个标准偏差范围内。
  • 约 99.7% 的点在 -3 至 3 个标准偏差范围内。

这使我们可以轻松估计变量的变化性,并给出相应置信水平,它的可能取值是多少。例如,在上面的灰色钟形曲线中,变量值在 99-101 之间的可能性为 68.2%。

06 正态概率分布函数

正态概率分布函数的形式如下:

概率密度函数基本上可以看作是连续随机变量取值的概率。

正态分布是钟形曲线,其中mean = mode = median。

  • 如果使用概率密度函数绘制变量的概率分布曲线,则给定范围的曲线下的面积,表示目标变量在该范围内取值的概率。
  • 概率分布曲线基于概率分布函数,而概率分布函数本身是根据诸如平均值或标准差等多个参数计算的。
  • 我们可以使用概率分布函数来查找随机变量取值范围内的值的相对概率。例如,我们可以记录股票的每日收益,将它们分组到适当的集合类中,然后计算股票在未来获得20-40%收益的概率。

标准差越大,样品中的变化性越大。

07 如何使用 Python 探索变量的概率分布

最简单的方法是加载 data frame 中的所有特征,然后运行以下脚本(使用pandas 库):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DataFrame.hist(bins=10)
#Make a histogram of the DataFrame.

该函数向我们展示了所有变量的概率分布。

08 变量服从正态分布意味着什么?

如果我们将大量具有不同分布的随机变量加起来,所得到的新变量将最终具有正态分布。这就是前文所述的中心极限定理。

服从正态分布的变量总是服从正态分布。例如,假设 A 和 B 是两个具有正态分布的变量,那么:

  • A x B 是正态分布
  • A + B 是正态分布

因此,使用正态分布,预测变量并在一定范围内找到它的概率会变得非常简单。

09 样本不服从正态分布怎么办?

我们可以将变量的分布转换为正态分布。

我们有多种方法将非正态分布转化为正态分布:

1. 线性变换

一旦我们收集到变量的样本数据,我们就可以对样本进行线性变化,并计算Z得分:

  1. 计算平均值
  2. 计算标准偏差
  3. 对于每个 x,使用以下方法计算 Z:

2. 使用 Boxcox 变换

我们可以使用 SciPy 包将数据转换为正态分布:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scipy.stats.boxcox(x, lmbda=None, alpha=None)

3. 使用 Yeo-Johnson 变换

另外,我们可以使用 yeo-johnson 变换。Python 的 sci-kit learn 库提供了相应的功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sklearn.preprocessing.PowerTransformer(method=’yeojohnson’,standardize=True, copy=True)

10 正态分布的问题

由于正态分布简单且易于理解,因此它也在预测研究中被过度使用。假设变量服从正态分布会有一些显而易见的缺陷。例如,我们不能假设股票价格服从正态分布,因为价格不能为负。因此,我们可以假设股票价格服从对数正态分布,以确保它永远不会低于零。

我们知道股票收益可能是负数,因此收益可以假设服从正态分布。

假设变量服从正态分布而不进行任何分析是愚蠢的。

变量可以服从Poisson,Student-t 或 Binomial 分布,盲目地假设变量服从正态分布可能导致不准确的结果。 11 总结

本文阐述了正态分布的概念和性质,以及它如此重要的原因。

希望能帮助到你。

原文链接:http://bit.ly/2NyetFz

有话要说?

Q: 这么神奇的正态分布,你玩转了吗?

欢迎留言与大家分享

猜你想看?

  • 一文看懂数据清洗:缺失值、异常值和重复值的处理
  • 2019上半年,457635位大数据用户最喜爱的10本书
  • 发际线预警!10本程序员必读烧脑经典,你敢挑战一本吗?
  • 手把手教你实现共享单车数据分析及需求预测

更多精彩?

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单 | 干货

大数据 | 揭秘 | Python | 可视化

AI | 人工智能 | 5G | 区块链

机器学习 | 深度学习 | 神经网络

1024 | 段子 | 数学 | 高考

据统计,99%的大咖都完成了这个神操作

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spark Core源码精读计划8 | SparkEnv中RPC环境的基础构建
在之前的文章中,我们由SparkContext的初始化提到了事件总线LiveListenerBus与执行环境SparkEnv。在讲解SparkEnv的过程中,RPC环境RpcEnv又是首先被初始化的重要组件。做个不怎么恰当的比较,SparkEnv之于SparkContext,正如RpcEnv之于SparkEnv。
大数据真好玩
2019/08/08
6420
Spark内核详解 (2) | Spark之间的通讯架构
Spark 内置的RPC框架前后共有两种架构,一个是在Spark2.0.0中被移除的Akka,一个则是借鉴了Akka 的 Actor 模型的Netty
不温卜火
2020/10/28
1.4K0
Spark内核详解 (2) | Spark之间的通讯架构
Spark Core源码精读计划9 | Spark RPC环境中的消息调度逻辑
上一篇文章以NettyRpcEnv的概况结尾,对它内部的一些重要组件进行了简要的介绍。比起继续向下深挖,个人感觉现在平行地来搞比较合适,毕竟我们已经来到了相当底层的地方不是么?
大数据真好玩
2019/08/08
9080
spark RPC原理
Spark-1.6以后RPC默认使用Netty替代Akka,在Netty上加了一层封装,为实现对Spark的定制开发,所以了解Spark中RPC的原理还是有必要的
俺也想起舞
2019/07/24
1.1K0
Spark netty RPC 通信原理
通信是分布式程序的血液和神经,就好比大脑发出的执行需要通过神经和需要才能传递到手脚进行执行。可见好的通信能力是分布式系统的重重之中。
Tim在路上
2022/05/20
1.1K0
Aloha:一个分布式任务调度框架
Aloha 是一个基于 Scala 实现的分布式的任务调度和管理框架,提供插件式扩展功能,可以用来调度各种类型的任务。Aloha 的典型的应用场景是作为统一的任务管理入口。例如,在数据平台上通常会运行各种类型的应用,如 Spark 任务,Flink 任务,ETL 任务等,统一对这些任务进行管理并及时感知任务状态的变化是很有必要的。
Spark学习技巧
2019/05/15
1.3K0
阅读源码|Spark 与 Flink 的 RPC 实现
近日常有同学来问我如何阅读代码,关于这个问题的一般性答案我特别提了一个问题并自问自答。出于提供一个实际的例子的考量,正好此前综合地阅读 Spark 的 RPC 实现、Flink 基于 Akka 的 RPC 实现和 Actor Model 的通信模型,写成本文分享我阅读分布式计算系统 Spark 和 Flink 中的 RPC 实现的过程和思考。
王知无-import_bigdata
2020/04/15
1.3K0
Spark内核详解 (3) | Spark集群启动流程的简单分析
本片博文主要分析的是Standalone 模式下 Spark 集群(Master, work)启动流程
不温卜火
2020/10/28
9450
Spark内核详解 (3) | Spark集群启动流程的简单分析
大数据技术之_19_Spark学习_06_Spark 源码解析小结
1、spark 一开始使用 akka 作为网络通信框架,spark 2.X 版本以后完全抛弃 akka,而使用 netty 作为新的网络通信框架。 最主要原因:spark 对 akka 没有维护,需要 akka 更新,spark 的发展受到了 akka 的牵制,akka 版本之间无法通信,即 akka 兼容性问题。 2、RpcEnv:RPC 上下文环境,每个 Rpc 端点运行时依赖的上下文环境称之为 RpcEnv。类似于 SparkContext,默认由 NettyRpcEnv 实现,由 NettyRpcEnvFactory 创建 RpcEnv。 3、RpcEndpoint:RPC 端点,Spark 针对于每个节点(Client/Master/Worker)都称之一个 Rpc 端点且都实现 RpcEndpoint 接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果需要发送(询问)则调用 Dispatcher。代理是 RpcEndpointRef。 4、Dispatcher:消息分发器,针对于 RPC 端点需要发送消息或者从远程 RPC 接收到的消息,分发至对应的指令收件箱/发件箱。 5、Inbox:指令消息收件箱,一个本地端点对应一个收件箱,Dispatcher 在每次向 Inbox 存入消息时,都将对应 EndpointData 加入内部待 Receiver Queue 中。 6、OutBox:指令消息发件箱,一个远程端点对应一个发件箱,当消息放入 Outbox 后,紧接着将消息通过 TransportClient 发送出去。 7、TransportClient:Netty 通信客户端,主要负责将相对应的 OutBox 中的数据发送给远程 TransportServer。 8、TransportServer:Netty 通信服务端,主要用于接收远程 RpcEndpoint 发送过来的消息,并把消息传送给 Dispatcher。
黑泽君
2019/05/14
5900
大数据技术之_19_Spark学习_06_Spark 源码解析小结
[spark] Standalone模式下Master、WorKer启动流程
而Standalone 作为spark自带cluster manager,需要启动Master和Worker守护进程,本文将从源码角度解析两者的启动流程。Master和Worker之间的通信使用的是基于netty的RPC,Spark的Rpc推荐看深入解析Spark中的RPC。
UFO
2018/08/29
1.7K0
Spark Core源码精读计划#29:BlockManager主从及RPC逻辑
通过前面几篇文章的讲解,我们就把Spark Core存储体系中的内存存储和磁盘存储逻辑基本上讲完了,而负责将这些组件统一管理并发挥作用的就是BlockManager,那么从本文开始,我们就来逐渐探索它的细节……
大数据真好玩
2019/08/21
7250
Spark Core源码精读计划#29:BlockManager主从及RPC逻辑
Spark Core源码精读计划15 | 心跳接收器HeartbeatReceiver
按照SparkContext初始化的顺序,下一个应该是心跳接收器HeartbeatReceiver。由于笔者感染乙流仍然没有痊愈,状态不好,文中若有疏漏,请批评指正。
大数据真好玩
2019/08/19
1.2K0
大数据技术之_19_Spark学习_06_Spark 源码解析 + Spark 通信架构、脚本解析、standalone 模式启动、提交流程 + Spark Shuffle 过程 + Spark 内存
上图展示了 2 个 RDD 进行 JOIN 操作,体现了 RDD 所具备的 5 个主要特性,如下所示:   • 1)一组分区   • 2)计算每一个数据分片的函数   • 3)RDD 上的一组依赖   • 4)可选,对于键值对 RDD,有一个 Partitioner(通常是 HashPartitioner)   • 5)可选,一组 Preferred location 信息(例如,HDFS 文件的 Block 所在 location 信息) 有了上述特性,能够非常好地通过 RDD 来表达分布式数据集,并作为构建 DAG 图的基础:首先抽象一个分布式计算任务的逻辑表示,最终将任务在实际的物理计算环境中进行处理执行。
黑泽君
2019/05/14
1.7K0
大数据技术之_19_Spark学习_06_Spark 源码解析 + Spark 通信架构、脚本解析、standalone 模式启动、提交流程 + Spark Shuffle 过程 + Spark 内存
Spark源码分析————start-all
org.apache.spark.deploy.master.Master 让我们先来看看main()方法
俺也想起舞
2019/07/24
6460
Spark 源码(2) - Spark Rpc 三剑客的理解
谈到 Spark Rpc ,不得不提到 Spark Rpc 的三剑客:RpcEnv,RpcEndpoint,RpcEndpointRef。
kk大数据
2021/10/12
7140
Spark 源码(2) - Spark Rpc 三剑客的理解
spark1.x升级spark2如何升级及需要考虑的问题
问题导读 1.spark2升级哪些内容变化? 2.升级中spark哪些没有发生变化? 3.cloudera中,spark1和spark2能否并存? 4.升级后,可能会遇到什么问题? spark2出来已经很长时间了,但是由于spark1.6比较稳定,很多依然在使用。如果想使用spark2,那么该如何升级。我们window升级一般为直接点击升级即可,剩下的事情,不用我们管。但是spark的升级确实有点出乎意料。相当于我们直接安装,但是可以借用以前的配置,比如配置文件基本是不变的,如果目录相同,环境变量
用户1410343
2018/03/26
3K0
spark1.x升级spark2如何升级及需要考虑的问题
Spark Core源码精读计划13 | 度量系统MetricsSystem的建立
《Spark Core源码精读计划3 | SparkContext辅助属性及后初始化》
大数据真好玩
2019/08/14
8190
Spark Core源码精读计划13 | 度量系统MetricsSystem的建立
Spark Core源码精读计划12 | Spark序列化及压缩机制浅析
《Spark Core源码精读计划3 | SparkContext辅助属性及后初始化》
大数据真好玩
2019/08/14
8210
motan客户端
方法调用对于程序员来讲是再正常不过的事了,object.method(),RPC的使用也一样,但底层对这一过程又切分开,有client和server两端,也就是调用者与实现者
码农戏码
2021/03/23
1.1K0
spark源码系列之内部通讯的三种机制
本文是以spark1.6.0的源码为例讲解。 Spark为协调各个组件完成任务及内部任务处理采用了多种方式进行了各个组件之间的通讯。总共三个部分牵涉的功能是: 1,DAG相关的DAGSchedulerEventProcessLoop。 2,sparkUI相关的SparkListener 3,RPC相关netty RPC流程。本文只讲流程,后面会详细介绍。 一,单个部件自己消息处理方式 DAGSchedulerEventProcessLoop该类继承自EventLoop。是一个典型的生产消费模型。 A),生产
Spark学习技巧
2018/01/30
1.2K0
spark源码系列之内部通讯的三种机制
推荐阅读
相关推荐
Spark Core源码精读计划8 | SparkEnv中RPC环境的基础构建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验