NumPy 均勻分佈模擬及 Seaborn 視覺化教程

小万哥丶發表於2024-05-30

均勻分佈

簡介

均勻分佈是一種連續機率分佈,表示在指定範圍內的所有事件具有相等的發生機率。它常用於模擬隨機事件,例如生成隨機數或選擇隨機樣本。

引數

均勻分佈用兩個引數來定義:

a:下限,表示分佈的最小值。
b:上限,表示分佈的最大值。

公式

均勻分佈的機率密度函式 (PDF) 為:

f(x) = 1 / (b - a)    for a <= x <= b

其中:

f(x):表示在區間 [a, b] 內 x 點的機率密度。
a:分佈的下限。
b:分佈的上限。

生成均勻分佈資料

NumPy 提供了 random.uniform() 函式來生成服從均勻分佈的隨機數。該函式接受以下引數:

low:分佈的下限,預設為 0。
high:分佈的上限,預設為 1。
size:輸出陣列的形狀。

示例:生成 10 個介於 0 到 1 之間的均勻分佈隨機數:

import numpy as np

data = np.random.uniform(low=0, high=1, size=10)
print(data)

視覺化均勻分佈

Seaborn 庫提供了便捷的函式來視覺化分佈,包括均勻分佈。

示例:繪製 1000 個介於 0 到 1 之間的均勻分佈隨機數的分佈圖:

import seaborn as sns
import numpy as np

data = np.random.uniform(low=0, high=1, size=1000)
sns.distplot(data)
plt.show()

練習

  1. 生成 500 個介於 -10 到 10 之間的均勻分佈隨機數,並繪製它們的分佈圖。
  2. 比較不同範圍下均勻分佈形狀的變化。
  3. 利用均勻分佈來模擬 100 次拋硬幣的結果,並計算正面朝上的次數的機率。

解決方案

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# 1. 生成隨機數並繪製分佈圖
data = np.random.uniform(low=-10, high=10, size=500)
sns.distplot(data)
plt.show()

# 2. 比較不同範圍下分佈形狀的變化
low_values = [-10, 0, 10]
high_values = [10, 20, 30]
for low, high in zip(low_values, high_values):
    data = np.random.uniform(low=low, high=high, size=1000)
    sns.distplot(data, label=f"[{low},{high}]")
plt.legend()
plt.show()

# 3. 模擬拋硬幣結果並計算正面朝上的次數機率
heads = np.random.uniform(low=0, high=1, size=100) > 0.5
print("正面朝上的次數:", heads.sum())
print("正面朝上的機率:", heads.mean())

邏輯分佈

簡介

邏輯分佈,也稱為Logistic分佈,是一種連續機率分佈,常用於建模具有 S 形增長特徵的現象,例如生物種群增長、疫情發展等。它在機器學習中也具有廣泛的應用,例如邏輯迴歸、神經網路等。

引數

邏輯分佈用兩個引數來定義:

loc:位置引數,表示分佈的中心位置。預設為 0。
scale:尺度引數,控制分佈的平坦程度。較大的尺度引數使分佈更加平坦,兩側尾部更加分散。預設為 1。

公式

邏輯分佈的機率密度函式 (PDF) 為:

f(x) = (scale / (π (1 + (x - loc) / scale)^2))    for all x

其中:

f(x):表示在所有實數 x 點的機率密度。
loc:分佈的位置引數。
scale:分佈的尺度引數。

生成邏輯分佈資料

NumPy 提供了 random.logistic() 函式來生成服從邏輯分佈的隨機數。該函式接受以下引數:

loc:位置引數,預設為 0。
scale:尺度引數,預設為

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章