概率学中的随机变量与分布
Random Variables
如果一个变量的值存在一个与之相关联的概率分布,则称该变量为“随机变量(Random Variable)”。数学上更严谨的定义如下:
设随机试验的样本空间为S={e},X=X(e)是定义在样本空间S上的实值单值函数,称X=X(e)为随机变量。
一个最常见的随机数例子就是扔硬币,例如可以记正面为1,反面为0。更复杂的情况是扔10次硬币,记录出现正面的次数,其值可以为0到9之间的整数。
通常可以将随机变量分为离散型随机变量(Discrete Random Variable)和连续型随机变量(Continuous Random Variable),它们的分布方式则对应为离散分布(Discrete Distribution)与连续分布(Continuous Distribution)。
对于离散型随机变量X而言,若要掌握它的统计规律,则必须且只需知道X的所有可能可能取值以及取每一个可能值的概率。在概率论中,是通过分布律来表现的。其公式可以记为:
最简单的分布律为(0-1)分布,扔硬币的案例就属于这种离散分布,它的随机变量要么为0,要么为1,各自的概率均为50%。
连续分布
Continuous Distribution
对于连续型随机变量而言,可能的取值无法通过列举的方式展现;而且针对这样的随机变量,统计分析并不会针对某个具体随机变量出现的概率感兴趣,而是考虑某个随机变量区间,也即是说要研究随机变量所取的值落在一个区间的概率,这就引入了分布函数(Distribution Function)的概念。分布函数F(x)记作:
分布函数完整地描述了随机变量的统计规律性,如果我们已知随机变量X的分布函数F(X),就知道X落在任一区间的概率。若以下公式成立,则称非负可积函数f(x)为概率密度函数(probability density function, pdf),而此时的X则为连续型随机变量。
由于:
所以,连续型随机变量的概率密度函数是其分布函数的导数,即:
分布函数的公式牵涉到积分运算,可以简单地理解为:
若一个连续分布存在一个密度函数f,且h的值较小,则在x到x+h区间中值的概率约等于h*f(x)。
我们来看看均匀分布(Uniform Distribution)的概率密度函数。此时f(x)满足:
这个函数非常简单,随机变量X落到区间[a, b)的概率要么为0,要么为1/(b-a)。假设a=0,b=1,则Python实现该区间的概率密度函数为:
def uniform_pdf(x):
return 1 if x >=0 and x < 1 else 0
如果h的值取值为0.1,实际上就相当于对[1, 0)取十等分。取其中一个区间[0.2, 0.3),则随机变量落在这个区间中的概率就为1/10,即P(x)=h*f(x),此时h为0.1, f(x)在[0.2, 0.3)区间返回1,故而P(x) = 0.1。
如果要获得随机变量小于或等于特定的某个数值的概率,即P(X<=x),则可以使用累加分布函数(cumulative distribution funciton, cdf)。例如前面例子中的均匀分布,实现cdf即为:
def uniform_cdf(x)
if x < 0: return 0
elif x < 1: return x
else: return 1
正态分布
Normal Distribution
在连续型随机变量中,最重要的一种随机变量是具有钟形概率分布的随机变量。这种随机变量被称之为正态随机变量,对应的概率分布则被称之为正态分布(Normal Distribution)。正态分布是最重要的一种连续型分布,现实生活中有很多例子都满足正态分布的钟形曲线,例如人的身高,高个子和矮个子都是少数,中等身材的人居多;市场销售额,特别差的特别好都是少数,多数处于中间状态;学生在一个班级或年级中的成绩分布,同样如此。
正态分布的概率密度函数为:
python对该函数的实现:
def normal_pdf(x, mu=0, sigma=1):
sqrt_two_pi = math.sqrt(2 * math.pi)
return (math.exp(-(x-mu) ** 2 / 2 / sigma ** 2) / (sqrt_two_pi * sigma))
下图是正态分布的pdf可视化展现,其中μ代表mean值,σ代表standard deviation。
该图形非常直观地展现了随机变量的分布情况与μ和σ之间的关系。可以发现,σ的值决定了钟形曲线的宽度,σ值越大,曲线约宽。而μ值则决定了钟形曲线的中心所在。
当μ为0且σ为1时,该正态分布则被称之为标准正态分布(standard normal distribution)。此时,若用φ(x)表示概率密度函数,用Φ(x)表示分布函数。则公式为:
正态分布的cdf不是一个初等函数,在python中可以调用math库中的erf来实现。erf即误差函数(error function),或者称之为Gauss error function。它的公式被定义为:
python实现的正态分布函数为:
def normal_cdf(x, mu=0, sigma=1):
return (1 + math.erf((x - mu) / math.sqrt(2) / sigma)) / 2
对正态分布函数进行可视化,显示的图形为S形曲线(sigmoid shape),如下图所示:
中心极限定理
Central Limit Theorem
正态分布之所以有用,主要的原因就在于中心极限定理。简单来讲,当样本数据的量足够大,且彼此之间相互独立,则样本均值X的分布接近正态分布,均值等于μ,而标准差等于
。
《概率论与数理统计》在介绍中心极限定理时写道:
在客观实际中有许多随机变量,它们是由大量的相互独立的随机因素的综合影响所形成的,其中每一个别因素在总的影响中所起的作用都是微小的。这种随机变量往往近似地服从正态分布。这种现象就是中心极限定理的客观背景。
事实上,中心极限定理并非只有一个,在统计学中,常常把证明其极限分布为正态分布的定理都统称为中心极限定理。最早的中心极限定理是在18世纪初由德莫佛证明的,即二项分布以正态分布为其极限分布的定理。前面介绍的中心极限定理则是19世纪20年代林德伯格和勒维证明的,即“在任意分布的总体中抽取样本,其样本均值的极限分布为正态分布”。
中心极限定理对于统计学而言意义深远,因为要从一个总体中收集所有的数据是很难操作或者不可行的,而基于中心极限定理,我们可以从总体中获取数据的子集,然后对这个样本进行统计分析,以得到总体的结论。从随机变量的角度来讲,我们要考虑的随机变量可以表示为很多个独立的随机变量之和。例如在物理实验中,测量误差是由许多观察不到的微小误差合成的,它们往往近似地服从正态分布。
因此,说正态分布为“分布之王(the king of distribution)”似乎也不为过;而中心极限定理也被许多人推认为是概率论中的首席定理。
- Go包管理的探索与实践
- 机器学习优化算法之爬山算法小结
- 机器学习之最小二乘法
- Go中的同步与锁
- 机器学习之KNN算法思想及其实现
- 机器学习之决策树熵&信息增量求解算法实现
- 朴素贝叶斯分类器(离散型)算法实现(一)
- spring设置全局异常处理器
- discuz论坛apache日志hadoop大数据分析项目:hive以及hbase是如何入库以及代码实现
- 【Golang语言社区】前端编程- 从零开始开发一款H5小游戏(一) 重温canvas的基础用法
- 今天聊聊分布式锁 No.86
- 【JS游戏编程基础】关于js里的this关键字的理解
- 【算法】随机森林算法
- 【Golang语言社区--H5编程】smoke.js
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
- Python+Selenium 技巧篇-svg标签内元素的xpath定位方式
- 小书MybatisPlus第5篇-Active Record模式精讲
- Python 语法问题-module ‘pip._internal‘ has no attribute ‘pep425tags‘. 原因及解决办法,32位、64位查看pip支持万能方法
- 总在说 Spring Boot 内置了 Tomcat 启动,那它的原理你说的清楚吗?
- JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件
- Python 技术篇-sha256()加密的使用方法,sha1、md5加密方法
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- Python 技术篇-获取秒级时间戳、毫秒级时间戳
- Python 技术篇-基于随机数的uuid码的生成
- BAT 脚本技术-利用bat批处理脚本静态指定ip地址、自动获取ip地址设置
- Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
- Spring Security 中如何细化权限粒度?
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
- 小书MybatisPlus第3篇-自定义SQL