首页 > 其他分享 >【scipy 基础】--统计分布

【scipy 基础】--统计分布

时间:2023-11-28 09:14:41浏览次数:37  
标签:分布 5.5 -- mu scipy stats sigma 统计

scipy.stats子模块包含大量的概率分布、汇总和频率统计、相关函数和统计测试、掩蔽统计、核密度估计、准蒙特卡罗功能等等。

这个子模块可以帮助我们描述和分析数据,进行假设检验和拟合统计模型等。

1. 主要功能

具体来说,scipy.stats子模块包括以下主要功能:

类别 说明
连续统计分布 包括正态分布、指数分布、卡方分布、t分布、F分布等常见的连续概率分布。这些分布都有各自的密度函数、分布函数、累积函数、随机生成器和统计特性等。
分段统计分布 包括伯努利分布、二项分布、泊松分布、正态分布、指数分布等常见的离散概率分布。这些分布都有各自的密度函数、分布函数、累积函数、随机生成器和统计特性等。
统计测试 包括t检验、方差分析、卡方检验、相关系数检验、回归分析等常见的统计测试方法。这些测试方法可以用于假设检验和数据分析。
拟合统计模型 包括线性回归、逻辑回归、岭回归等常见的回归模型,以及广义线性模型等复杂模型。这些模型可以用于数据拟合和预测。
其他功能 包括分布的随机生成、分位数生成、随机变量的数字特征计算、矩母函数等其他实用功能。

2. 统计分布示例

下面演示几个通过scipy.stats子模块构建的统计分布的示例。

2.1. 多项式分布

多项式分布是一种离散型概率分布,用于描述在n次独立重复试验中,每次试验中k个不同的结果出现的概率。其中n表示试验次数,k表示要发生的结果数。

多项式分布主要用于描述在实际问题中一些离散型随机变量的概率分布,
例如人类的寿命、产品的寿命、遗传学中的多基因效应、网络中的链接数等。

构建一个多项式分布的示例:
\(f(x_1,x_2,...,x_k;p_1,p_2,...,p_k,n)=\frac{n!}{x_1!...x_k!}p_1^{x_1}p_2^{x_2}...p_k^{x_k}\)

from scipy.stats import multinomial

N = 5
p = np.ones(N)/N

# 计算概率质量函数
multinomial.pmf([N,0,0,0,0], n=N, p=p)

# 基于参数n和p,从多项分布中抽取随机样本
multinomial.rvs(n=100, p=p, size=5)
# 运行结果:
array([[25, 17, 16, 23, 19],
       [16, 23, 23, 19, 19],
       [19, 24, 14, 20, 23],
       [19, 22, 27, 16, 16],
       [15, 11, 30, 23, 21]])

size就是随机样本的个数,相当于返回的二维数组的行数。
每行数据的数目就是参数p的长度(也就是代码中的N)。
每行数据加起来的就是 参数n(上面的示例中,二维数组每行加起来的100

2.2. \(\beta\)分布

\(\beta\)分布是一种连续型概率分布,用于描述区间[0,1]内某一随机变量的概率分布形态。
\(\beta\)分布的概率密度函数由两个参数αβ确定,它们分别控制分布的左端点和右端点以及分布的形状。

\(\beta\)分布主要用于描述在实际问题中一些变量在区间[0,1]内的概率分布形态,
例如人类的能力、测试的得分、金融市场的收益率等。

构建一个\(\beta\)分布的示例:
\(\begin{align*} f(x;a,b) = \frac{\varGamma(a+b)x^{a-1}(1-x)^{b-1}}{\varGamma(a)\varGamma(b)} \quad\quad 0 \le x \le 1 \end{align*}\)

from scipy.stats import beta

# 三种不同的 a,b 系数,分别为:
# a<b; a==b; a>b
params = [(1.5, 5.5), (5.5, 5.5), (5.5, 1.5)]
for p in params:
    a, b = p
    mean, var, skew, kurt = beta.stats(a, b, moments="mvsk")
    print(
        "平均数:{:.2f}, 方差:{:.2f}, 偏态:{:.2f}, 峰度系数:{:.2f}".format(
            mean,
            var,
            skew,
            kurt,
        )
    )

# 运行结果:
平均数:0.21, 方差:0.02, 偏态:0.88, 峰度系数:0.43
平均数:0.50, 方差:0.02, 偏态:0.00, 峰度系数:-0.43
平均数:0.79, 方差:0.02, 偏态:-0.88, 峰度系数:0.43

三种不同的分布绘制成图形的话:

from scipy.stats import beta
import numpy as np
import matplotlib.pyplot as plt

params = [(1.5, 5.5), (5.5, 5.5), (5.5, 1.5)]
labels = ["a=1.5,b=5.5", "a=5.5,b=5.5", "a=5.5,b=1.5"]
for idx, p in enumerate(params):
    a, b = p
    x = np.linspace(beta.ppf(0, a, b), beta.ppf(1, a, b), 100)
    plt.plot(x, beta.pdf(x, a, b),label=labels[idx])

plt.legend(loc="upper center")
plt.show()

image.png

从图中可以体会,a, b两个参数对分布的影响。

2.3. 高斯分布

高斯分布,也称为正态分布(Normal distribution),是一种连续概率分布,在自然界和社会科学领域中广泛存在。
它的概率密度函数呈钟形曲线,两头低,中间高,左右对称,因此也被称为钟形曲线

高斯分布主要用于描述许多自然现象和社会科学中的概率分布形态,
例如人类的身高、人类的智商、动物的寿命、人类的寿命、产品的寿命、遗传学中的多基因效应、网络中的链接数等。

构建一个高斯分布的示例:
\(\begin{align*} f(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi\sigma^2}}exp(-\frac{(x-\mu)^2}{\sigma^2}) \quad\quad -\infty \lt x \le \infty \end{align*}\)

from scipy.stats import norm

params = [(1, 2),(2, 2),(2, 1)]

for p in params:
    mu, sigma = p
    mean, var = norm.stats(loc=mu, scale=sigma, moments='mv')
    print(
        "平均数:{:.2f}, 方差:{:.2f}".format(
            mean,
            var,
        )
    )

# 运行结果:
平均数:1.00, 方差:4.00
平均数:2.00, 方差:4.00
平均数:2.00, 方差:1.00

从运行结果可以看出,\(\mu\)参数会影响结果的平均数;\(\sigma\)参数则影响结果的方差

将结果绘制成图形更好理解一些:

from scipy.stats import norm
import matplotlib.pyplot as plt

params = [(1, 2),(2, 2),(2, 1)]
labels = ["mu=1,sigma=2", "mu=2,sigma=2", "mu=2,sigma=1"]

for idx, p in enumerate(params):
    mu, sigma = p
    x = np.linspace(norm.ppf(0.01, mu, sigma), norm.ppf(0.99, mu, sigma), 100)
    plt.plot(x, norm.pdf(x, mu, sigma), label=labels[idx])

plt.legend(loc="upper left")
plt.show()

image.png
从图中来看,\(\mu\)参数控制图形左右偏移程度,\(\sigma\)参数控制图形的陡峭程度

3. 总结

总之,scipy.stats子模块为统计学和数据分析提供了丰富的工具和函数,可以帮助我们进行各种统计分析和数据处理任务。

不过,统计是一个非常大的领域,其中有些主题还是超出了 SciPy 的范围,并被其他Python软件包涵盖。
比如其中一些比较著名的是statsmodelsPyMCscikit-learn等等。
遇到scipy.stats难以处理的问题时,可以看看这些库中是否已经有解决方案。

标签:分布,5.5,--,mu,scipy,stats,sigma,统计
From: https://www.cnblogs.com/wang_yb/p/17861052.html

相关文章

  • MACD标准背离公式和选股公式
    一、MACD底背离可靠买点1、底背离产生之后的第一个金叉为最佳买点(macd面积背离)2、前提条件:第一个macd涨幅动能要充足,这样成功率高二、MACD底背离失败买点1、MACD标准背驰公式源码如下:DIFF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIFF,9);MACD:2*(DIFF-DEA),COLORSTICK,LI......
  • apache的文件名工具类FilenameUtils
    org.apache.commons.io.FilenameUtils。FileUtils和FilenameUtils分别是Apache对文件名和文件的封装,两者可以配合使用。<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></depe......
  • 进程管理学习心得
    学习Linux进程管理是深入理解系统运行的必经之路。通过掌握命令如ps、top和htop,我能够实时监控系统中运行的进程,了解它们的资源占用情况和运行状态。深入研究kill命令,我学到了如何终止进程,以及使用不同的信号与进程进行交互。这对于处理僵尸进程和优雅地终止程序至关重要。通过......
  • VS2008 Debug
    在处理WinCE程式时调试用到的。正确DeBug的方法如下:1.将dll程序的生成路径选择到正确的路径下:具体啥路径,就看自己的程序结构了,得保证你的外部应用程序可以正常调用这个dll;2.将项目重新进行编译,并打开编译目录把编译完成的dll属性设置成......
  • i/o重定向学习心得
    学习LinuxI/O重定向是掌握命令行工具的关键技能之一。通过了解>、>>和<等符号,我学会了将命令的输入和输出重定向到不同的位置。使用>符号,我可以将命令的输出重定向到文件,创建新文件或覆盖已有文件。而>>符号则会将输出追加到文件末尾,保留文件原有内容。了解<符号的用法,我能够从......
  • XCTF-mfw
    访问主页经过发现page传参应该是一个文件包含页面,不过没有加后缀名,应该是在服务端会自动给我们加上试了文件包含的data://协议,还有%00阶段没有成功,使用dirb进行目录爆破得到.git目录,应该是.git泄露,使用GitHack获取python2GitHack.pyhttp://61.147.171.105:60868/.git......
  • 时间工具
    获取Date类型的年,月,日,时,分,秒   获取系统当前时间的年,月,日,时,分,秒 将字符串转换为Date类型 java8是如何处理时间及日期的1、如何在java8中获取当天的日期java8中有个叫LocalDate的类,能用来表示今天的日期。这个类与java.util.Date略有不同,因为它只包含日期,没有时间......
  • 计算机科学速成课
    建议看看计算机科学速成课,一门很全面的计算机原理入门课程,短短10分钟可以把大学老师十几节课讲的东西讲清楚!整个系列一共41个视频,B站上有中文字幕版。每个视频都是一个特定的主题,例如软件工程、人工智能、操作系统等,主题之间都是紧密相连的,比国内很多大学计算机课程强太多!这门......
  • 华为云挂载云共享盘VDB
    先登录华为云后台,把共享盘挂载到需要挂载的服务器 进入服务器#显示所有块设备信息lsblk 挂载#如上图所示,/dev/vdb是要挂载的共享盘#创建要挂载的目录sudomkdir-p/data/test#挂载sudomount-text4/dev/vdb/data/test#df-h查看挂载df-hF......
  • 低代码部署方式大揭秘:满足你的多种选择
    本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。、前言低代码开发平台为企业提供创新的应用程序开发和部署方法,让非技术人员也能够轻松创建和发布应用程序。通过直观的图形化界面和少量编码,企业可以......