热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

概率统计思维——几种概率分布函数

随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不

随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。

概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不仅在于统计,更可以指导你的人生。

本文大纲:

常见的离散性分布和连续性分布

如何理解正态分布和幂律分布的商业模式

使用python实现几种常见的概率分布模型

一、常见的离散性分布和连续性分布

在分清楚什么是离散性和连续性之前,我们首先要知道什么是随机变量。随机变量就是我们对每一个随机事件的结果进行赋值,这种不同的值就是随机变量。拿抛硬币为例吧,正面为1,反面为0,这样就有了把事件(正/反)用变量(1/0)表示的过程。

为什么要讲这么细呢?因为不同的事件不同的模型也会利用不同的概率函数。

常见的离散性概率分布有:伯努利分布、二项分布、几何分布、泊松分布;常见的连续性分布有:正态分布和幂律分布

下面用几个图解释一下每种分布的定义和计算方法:

伯努利分布是离散概率分布里面的基础,就是从抛硬币里抽象出来的:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

二项分布则是多次重复的伯努利分布:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

几何分布和二项分布非常相似,只有最后一点不同:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

泊松分布则是二项分布进行无限细分的结果:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

至于正态分布,我放到下一节讲。需要注意的是,离散性分布要求事件是独立事件,且每次发生事件的概率相同。这就对数据有很高的要求了,想了解怎么区分使用不同的概率函数,可以来猴子哥这里学习。

二、如何理解正态分布和幂律分布的商业模式

正态分布和幂律分布是我们经常可以听到的词。看两张图你就明白了:

正态分布有哪些:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

幂律分布有哪些:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

总结一下就是,每个人都是正态分布的普通人,但由于选择不同,最终的成绩却可以变成幂律分布一般的天差地别。

你一定想问,如何把自己的收入位于幂律分布的前列?又如何完成财富的累积呢?

猴子哥给了三个建议:

为自己的事情设置优先级。先做那些重要的事。才能在正确的路上不断积累经验。

通过有幂律分布的工作和生活方式寻找机会。比如互联网,比如知识付费,比如出书。

人不要担心没有时间,也许白天的工作只能将自己的时间出售一次,但每个人都有并行处理事情的能力,你完全可以利用空闲时间打磨一个技能,完成自我的提升。

说回到正态分布,什么是正态分布呢?

正太分布又名高斯分布(Gaussian distribution),正态曲线呈钟型,两头低,中间高,左右对称。若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。如图:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

有趣的是,正态分布不能直接得到某一个点的值,因为它是连续性分布。我们需要计算一个范围:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

Z表格就是将所有可能的值进行归一化后放入一张可以查询的表中,通过查询比某个值小的概率得到你需要的范围内的正态分布的概率:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

三、使用python实现几种常见的概率分布模型

那么,用python怎么实现这些分布呢?我们需要用到科学计算包scipy

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

我将离散和随机变量分别画在两张画板上,代码如下:

#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
from IPython.core.pylabtools import figsize # import figsize
figsize(10, 10) # 设置 figsize
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
'''
plt.subplot2grid((2,2),(0,0)) #伯努利分布
X1 = np.arange(0, 2,1)
p1 = 0.5 # 硬币朝上的概率
pList1 = stats.bernoulli.pmf(X1, p1)
plt.plot(X1, pList1, marker='o',line)
plt.vlines(X1, 0, pList1)
plt.xlabel('随机变量:抛硬币1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f' % p1)
plt.subplot2grid((2,2),(0,1)) #二项分布
n2 = 6 # 做某件事情的次数
p2 = .8 # 做某件事情成功的概率
X2 = np.arange(0, n2+1,1)
pList2=stats.binom.pmf(X2,n2,p2)
plt.vlines(X2, 0, pList2)
plt.xlabel('随机变量:股票成功次数')
plt.ylabel('概率')
plt.title('二项分布:n=%i,p=%.2f' % (n2,p2))#%i代表int类型,%.2f代表float类型小数点后两位
plt.subplot2grid((2,2),(1,0)) #几何分布
k3 = 5
# 做某件事情成功的概率,这里假设每次表白成功概率都是60%
p3 = 0.6
X3 = np.arange(1, k3+1,1)
pList3 = stats.geom.pmf(X3,p3)
plt.plot(X3, pList3, marker='o',line)
plt.vlines(X3, 0, pList3)
plt.xlabel('随机变量:表白第k次才首次成功')
plt.ylabel('概率')
plt.title('几何分布:p=%.2f' % p3)
plt.subplot2grid((2,2),(1,1)) #泊松分布
mu4 = 2 # 平均值:每天发生2次事故
k4=4 #次数,现在想知道每天发生4次事故的概率
#包含了发生0次、1次、2次,3次,4次事故
X4 = np.arange(0, k4+1,1)
pList4 = stats.poisson.pmf(X4,mu4)
plt.plot(X4, pList4, marker='o',line)
plt.vlines(X4, 0, pList4)
#x轴文本
plt.xlabel('随机变量:某路口发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值mu=%i' % mu4)
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.4, wspace=0.3)
plt.show()

如图:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

正态分布的实现代码和图形如下:

#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第1步,定义随机变量:
mu=0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5,0.1)
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,绘图
'''
plot默认绘制折线
'''
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))#$\sigma^2$表示特殊值
#网格
plt.grid()
#显示图形
plt.show()

《概率统计思维——几种概率分布函数》

以上。


推荐阅读
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • 本文将详细介绍如何在Webpack项目中安装和使用ECharts,包括全量引入和按需引入的方法,并提供一个柱状图的示例。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
author-avatar
伏染善
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有