import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

# 第一個子圖:均值為0,標準差為1的正態分布
mean1 = 0
std_dev1 = 1
num_samples = 1000
data1 = np.random.normal(mean1, std_dev1, num_samples)
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.hist(data1, bins=30, density=True, alpha=0.6, color='g', edgecolor='black')
plt.title('正態分布示例 1')
plt.xlabel('值')
plt.ylabel('密度')

x = np.linspace(-4, 4, 100)
p = 1/(std_dev1 * np.sqrt(2 * np.pi)) * np.exp(-(x - mean1)**2 / (2 * std_dev1**2))
plt.plot(x, p, 'k', linewidth=2, label = '正態分布曲線')
plt.legend()
plt.text(-3, 0.35, r'$\mu=0,\ \sigma=1$', fontsize=12)
plt.grid(True)

# 第二個子圖:均值為5,標準差為10的正態分布
mean2 = 5
std_dev2 = 10
data2 = np.random.normal(mean2, std_dev2, num_samples)

plt.subplot(1, 2, 2)
plt.hist(data2, bins=30, density=True, alpha=0.6, color='g', edgecolor='black')
plt.title('正態分布示例 2')
plt.xlabel('值')
plt.ylabel('密度')

x = np.linspace(-30, 40, 100)
p = 1/(std_dev2 * np.sqrt(2 * np.pi)) * np.exp(-(x - mean2)**2 / (2 * std_dev2**2))
plt.plot(x, p, 'k', linewidth=2, label='正態分布曲線')
plt.legend()
plt.text(-25, 0.035, r'$\mu=5,\ \sigma=10$', fontsize=12)
plt.grid(True)

plt.tight_layout()
plt.show()

正態分布作用

正態分布的應用廣泛,包括但不限于:

如何檢驗數據是否為正態分布

正態分布檢驗是一種用來驗證數據是否服從正態分布的方法,常見的正態分布檢驗包括以下幾種:

直方圖和正態概率圖檢驗:

統計檢驗方法:

偏度和峰度檢驗:

Anderson-Darling 檢驗:

mean = 0   
std_dev = 1
num_samples = 1000

data = np.random.normal(mean, std_dev, num_samples)
# 添加異常值
data[0] = 8
data[1] = -5
plt.figure(figsize=(15, 5))
plt.subplot(1, 3, 1)
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
plt.title('正態分布(包含異常值)')
plt.xlabel('值')
plt.ylabel('密度')

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = np.exp(-(x-mean)**2 / (2*std_dev**2)) / (std_dev * np.sqrt(2*np.pi))
plt.plot(x, p, 'k', linewidth=2, alpha = 0.3)

# 標記異常值
plt.scatter([data[0], data[1]], [0, 0], color='red', marker='o', label='異常值')

plt.text(-3, 0.35, r'$\mu=0,\ \sigma=1$', fontsize=12)
plt.text(-3, 0.3, '均值和標準差 ', fontsize=10, color='blue')
plt.text(2, 0.2, '正態分布曲線', fontsize=10, color='black')
plt.legend()
plt.grid(True)

from scipy import stats
# 繪制 Q-Q 圖
plt.subplot(1, 3, 2)
stats.probplot(data, dist="norm", plot=plt)
plt.title('Q-Q 圖')
plt.xlabel('理論分位數')
plt.ylabel('樣本分位數')
plt.grid(True)
# 繪制 P-P 圖
plt.subplot(1, 3, 3)
stats.probplot(data, dist="norm", plot=plt, fit=True)
plt.title('P-P 圖')
plt.xlabel('理論累積概率')
plt.ylabel('樣本累積概率')
plt.grid(True)
plt.show()

生成一組包含異常值的正態分布數據,繪制包含異常值的直方圖、Q-Q 圖和 P-P 圖,以幫助可視化數據分布和判斷數據是否符合正態分布,如果數據點落在一條直線上,則表明數據與正態分布擬合良好,可發現存在兩個數據點不在一條直線上,和異常值存在對應,對于這種異常值可采取3??原則來識別,3??原則來源于正態分布的特性,在正態分布中,約99.7%的數據點會落在均值和??的??的范圍內,因此超過這個范圍的數據點通常就被認為是異常值,詳情代碼參考往期文章基于分布的四種離群值檢驗方法

泊松分布

泊松分布理論

泊松分布是一種離散概率分布,用于描述在固定時間間隔或空間區域內,事件發生的次數,它假設這些事件是獨立發生的,并且在任意兩個不重疊的時間間隔內,事件發生的概率是相同的,泊松分布的概率質量函數公式如下:

# 設置泊松分布參數
lam = 3 # 泊松分布的參數 lambda,控制事件的平均發生率

# 生成泊松分布的數據
k_values = np.arange(0, 15) # 可視化的事件發生次數范圍
probabilities = np.exp(-lam) * np.power(lam, k_values) / np.array([np.math.factorial(k) for k in k_values])

# 繪制泊松分布的柱狀圖
plt.figure(figsize=(10, 6), dpi=300)
plt.bar(k_values, probabilities, color='skyblue', edgecolor='black')

plt.title('泊松分布')
plt.xlabel('事件發生次數')
plt.ylabel('概率')
for k, prob in zip(k_values, probabilities):
plt.text(k, prob + 0.01, f'{prob:.3f}', ha='center', va='bottom')

plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.xticks(k_values)
plt.ylim(0, max(probabilities) + 0.1)
plt.show()

卡方分布

卡方分布理論

卡方分布是一種連續概率分布,常用于描述多個獨立標準正態分布隨機變量的平方和的分布,卡方分布的概率密度函數公式如下:

from scipy.stats import chi2

# 設置自由度
degrees_freedom_1 = 5
degrees_freedom_2 = 10
x = np.linspace(0, 20, 1000)
pdf_1 = chi2.pdf(x, degrees_freedom_1)
pdf_2 = chi2.pdf(x, degrees_freedom_2)

plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(x, pdf_1, label=f'k={degrees_freedom_1}')
plt.title('卡方分布概率密度函數')
plt.xlabel('x')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)

plt.subplot(1, 2, 2)
plt.plot(x, pdf_2, label=f'k={degrees_freedom_2}')
plt.title('卡方分布概率密度函數')
plt.xlabel('x')
plt.ylabel('概率密度')
plt.legend()
plt.grid(True)
plt.show()

卡方分布作用

文章轉自微信公眾號@Python機器學習AI

上一篇:

ARIMA與Prophet的完美結合:AutoARIMAProphet時序模型

下一篇:

SHAP全解析:機器學習、深度學習模型解釋保姆級教程

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費