【scipy 基础】--统计分布
scipy.stats子模塊包含大量的概率分布、匯總和頻率統(tǒng)計、相關(guān)函數(shù)和統(tǒng)計測試、掩蔽統(tǒng)計、核密度估計、準蒙特卡羅功能等等。
這個子模塊可以幫助我們描述和分析數(shù)據(jù),進行假設(shè)檢驗和擬合統(tǒng)計模型等。
1. 主要功能
具體來說,scipy.stats子模塊包括以下主要功能:
| 類別 | 說明 |
|---|---|
| 連續(xù)統(tǒng)計分布 | 包括正態(tài)分布、指數(shù)分布、卡方分布、t分布、F分布等常見的連續(xù)概率分布。這些分布都有各自的密度函數(shù)、分布函數(shù)、累積函數(shù)、隨機生成器和統(tǒng)計特性等。 |
| 分段統(tǒng)計分布 | 包括伯努利分布、二項分布、泊松分布、正態(tài)分布、指數(shù)分布等常見的離散概率分布。這些分布都有各自的密度函數(shù)、分布函數(shù)、累積函數(shù)、隨機生成器和統(tǒng)計特性等。 |
| 統(tǒng)計測試 | 包括t檢驗、方差分析、卡方檢驗、相關(guān)系數(shù)檢驗、回歸分析等常見的統(tǒng)計測試方法。這些測試方法可以用于假設(shè)檢驗和數(shù)據(jù)分析。 |
| 擬合統(tǒng)計模型 | 包括線性回歸、邏輯回歸、嶺回歸等常見的回歸模型,以及廣義線性模型等復雜模型。這些模型可以用于數(shù)據(jù)擬合和預測。 |
| 其他功能 | 包括分布的隨機生成、分位數(shù)生成、隨機變量的數(shù)字特征計算、矩母函數(shù)等其他實用功能。 |
2. 統(tǒng)計分布示例
下面演示幾個通過scipy.stats子模塊構(gòu)建的統(tǒng)計分布的示例。
2.1. 多項式分布
多項式分布是一種離散型概率分布,用于描述在n次獨立重復試驗中,每次試驗中k個不同的結(jié)果出現(xiàn)的概率。其中n表示試驗次數(shù),k表示要發(fā)生的結(jié)果數(shù)。
多項式分布主要用于描述在實際問題中一些離散型隨機變量的概率分布,
例如人類的壽命、產(chǎn)品的壽命、遺傳學中的多基因效應、網(wǎng)絡(luò)中的鏈接數(shù)等。
構(gòu)建一個多項式分布的示例:
\(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
# 計算概率質(zhì)量函數(shù)
multinomial.pmf([N,0,0,0,0], n=N, p=p)
# 基于參數(shù)n和p,從多項分布中抽取隨機樣本
multinomial.rvs(n=100, p=p, size=5)
# 運行結(jié)果:
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就是隨機樣本的個數(shù),相當于返回的二維數(shù)組的行數(shù)。
每行數(shù)據(jù)的數(shù)目就是參數(shù)p的長度(也就是代碼中的N)。
每行數(shù)據(jù)加起來的和就是 參數(shù)n(上面的示例中,二維數(shù)組每行加起來的和是100)
2.2. \(\beta\)分布
\(\beta\)分布是一種連續(xù)型概率分布,用于描述區(qū)間[0,1]內(nèi)某一隨機變量的概率分布形態(tài)。
\(\beta\)分布的概率密度函數(shù)由兩個參數(shù)α和β確定,它們分別控制分布的左端點和右端點以及分布的形狀。
\(\beta\)分布主要用于描述在實際問題中一些變量在區(qū)間[0,1]內(nèi)的概率分布形態(tài),
例如人類的能力、測試的得分、金融市場的收益率等。
構(gòu)建一個\(\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 系數(shù),分別為:
# 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(
"平均數(shù):{:.2f}, 方差:{:.2f}, 偏態(tài):{:.2f}, 峰度系數(shù):{:.2f}".format(
mean,
var,
skew,
kurt,
)
)
# 運行結(jié)果:
平均數(shù):0.21, 方差:0.02, 偏態(tài):0.88, 峰度系數(shù):0.43
平均數(shù):0.50, 方差:0.02, 偏態(tài):0.00, 峰度系數(shù):-0.43
平均數(shù):0.79, 方差:0.02, 偏態(tài):-0.88, 峰度系數(shù):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()
從圖中可以體會,a, b兩個參數(shù)對分布的影響。
2.3. 高斯分布
高斯分布,也稱為正態(tài)分布(Normal distribution),是一種連續(xù)概率分布,在自然界和社會科學領(lǐng)域中廣泛存在。
它的概率密度函數(shù)呈鐘形曲線,兩頭低,中間高,左右對稱,因此也被稱為鐘形曲線。
高斯分布主要用于描述許多自然現(xiàn)象和社會科學中的概率分布形態(tài),
例如人類的身高、人類的智商、動物的壽命、人類的壽命、產(chǎn)品的壽命、遺傳學中的多基因效應、網(wǎng)絡(luò)中的鏈接數(shù)等。
構(gòu)建一個高斯分布的示例:
\(\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(
"平均數(shù):{:.2f}, 方差:{:.2f}".format(
mean,
var,
)
)
# 運行結(jié)果:
平均數(shù):1.00, 方差:4.00
平均數(shù):2.00, 方差:4.00
平均數(shù):2.00, 方差:1.00
從運行結(jié)果可以看出,\(\mu\)參數(shù)會影響結(jié)果的平均數(shù);\(\sigma\)參數(shù)則影響結(jié)果的方差。
將結(jié)果繪制成圖形更好理解一些:
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()
從圖中來看,\(\mu\)參數(shù)控制圖形左右偏移程度,\(\sigma\)參數(shù)控制圖形的陡峭程度。
3. 總結(jié)
總之,scipy.stats子模塊為統(tǒng)計學和數(shù)據(jù)分析提供了豐富的工具和函數(shù),可以幫助我們進行各種統(tǒng)計分析和數(shù)據(jù)處理任務。
不過,統(tǒng)計是一個非常大的領(lǐng)域,其中有些主題還是超出了 SciPy 的范圍,并被其他Python軟件包涵蓋。
比如其中一些比較著名的是statsmodels,PyMC,scikit-learn等等。
遇到scipy.stats難以處理的問題時,可以看看這些庫中是否已經(jīng)有解決方案。
總結(jié)
以上是生活随笔為你收集整理的【scipy 基础】--统计分布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦见黑白无常是什么预兆
- 下一篇: 《HelloGitHub》第 92 期