哈喽,我是小白~
今儿咱们继续聊聊概率分布的内容~
概率分布,它们描述了数据的生成过程和不确定性,有助于模型的推断与预测。通过概率分布,可以进行样本生成、估计未知参数,并有效应对噪声和变异数据。理解和选择合适的概率分布是构建可靠模型的核心。
涉及到的10个最常用的有:
-
正态分布 -
均匀分布 -
伯努利分布 -
二项分布 -
多项分布 -
指数分布 -
泊松分布 -
伽马分布 -
Beta分布 -
Dirichlet分布
一起来看看~
1. 正态分布 (Normal Distribution)
正态分布是最常见的连续概率分布之一,广泛应用于自然现象的建模,如测量误差和生物特征等。它具有对称的钟形曲线。
原理
正态分布描述了数据围绕均值对称分布的情况,其特征由均值 (μ) 和方差 (σ²) 决定。均值决定了分布的位置,而方差决定了分布的宽度。
核心公式
其中, 是均值, 是方差, 是标准差。
推导:
-
假设我们要最大化一个正态分布下的概率密度函数。 -
正态分布的概率密度函数是通过均值和方差构建的,可以看作是基于均值的平方差的指数函数。 -
对公式进行常规的积分运算,得出分布的标准化系数,即 部分。 -
通过拉普拉斯方法等数学技巧进一步推导得出完整的正态分布公式。
Python实现
下面是一个使用虚拟数据集的案例,基于正态分布创建了多个图形来进行数据分析,包括直方图、核密度估计图、QQ图和箱线图。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats
# 设置随机种子保证可重复性
np.random.seed(42)
# 生成正态分布数据
mu, sigma = 0, 1 # 均值和标准差
data = np.random.normal(mu, sigma, 1000)
# 创建一个画布和子图
fig, axs = plt.subplots(2, 2, figsize=(14, 12))
# 直方图和核密度估计图
sns.histplot(data, kde=True, ax=axs[0, 0], bins=30, color='skyblue')
axs[0, 0].set_title('Histogram and KDE')
axs[0, 0].set_xlabel('Value')
axs[0, 0].set_ylabel('Density')
# QQ图
stats.probplot(data, dist="norm", plot=axs[0, 1])
axs[0, 1].set_title('QQ Plot')
# 箱线图
sns.boxplot(data, ax=axs[1, 0], color='lightgreen')
axs[1, 0].set_title('Box Plot')
axs[1, 0].set_xlabel('Dataset')
# 密度图(不同正态分布的叠加)
sns.kdeplot(data, ax=axs[1, 1], color='blue', label='N(0,1)')
sns.kdeplot(np.random.normal(-2, 1, 1000), ax=axs[1, 1], color='red', label='N(-2,1)')
sns.kdeplot(np.random.normal(2, 1, 1000), ax=axs[1, 1], color='green', label='N(2,1)')
axs[1, 1].set_title('Overlayed KDE plots')
axs[1, 1].set_xlabel('Value')
axs[1, 1].set_ylabel('Density')
axs[1, 1].legend()
# 调整子图间距
plt.tight_layout()
# 显示图形
plt.show()
-
数据生成:使用 np.random.normal(mu, sigma, 1000)生成了1000个服从均值为0,标准差为1的正态分布数据。 -
图形生成: -
直方图和核密度估计图:使用 Seaborn 的 histplot画出直方图,并通过kde=True叠加核密度估计图。 -
QQ图:使用 Scipy 的 probplot绘制 Q-Q 图来检验数据的正态性。 -
箱线图:使用 Seaborn 的 boxplot绘制数据的箱线图,展示数据的分布特征。 -
密度图(叠加多个分布):绘制多个不同正态分布的核密度估计图,比较它们的分布情况。
2. 均匀分布 (Uniform Distribution)
均匀分布是一种简单的概率分布,其中区间内的所有值都是等概率的。常用于随机样本的生成。
原理
对于一个均匀分布,在区间 [a, b] 上的概率密度是常数。分布的特点是不偏不倚,即每个可能值的概率相等。
核心公式
推导:
-
均匀分布假设在区间 [a, b] 上的概率密度为常数。 -
由于概率密度函数的总积分必须为1,因此我们有 。 -
解积分得出 的结论。
Python实现
使用了均匀分布来生成虚拟数据集。该案例包括直方图、核密度估计图(KDE)、累积分布函数(CDF)图和散点图。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import uniform
# 生成虚拟数据集
np.random.seed(42)
data = uniform.rvs(size=1000, loc=0, scale=10) # 在区间 [0, 10) 上生成 1000 个均匀分布的样本
# 创建图形对象
plt.figure(figsize=(12, 8))
# 子图1:直方图和KDE图
plt.subplot(2, 2, 1)
sns.histplot(data, kde=True, color='skyblue', bins=30, stat='density', edgecolor='black')
plt.title('Histogram with KDE')
plt.xlabel('Value')
plt.ylabel('Density')
# 子图2:累积分布函数(CDF)
plt.subplot(2, 2, 2)
sns.ecdfplot(data, color='green')
plt.title('Cumulative Distribution Function (CDF)')
plt.xlabel('Value')
plt.ylabel('CDF')
# 子图3:Q-Q图(与标准均匀分布对比)
plt.subplot(2, 2, 3)
uniform_samples = np.sort(uniform.rvs(size=1000, loc=0, scale=10))
plt.scatter(uniform_samples, np.sort(data), color='purple', edgecolor='black')
plt.plot([0, 10], [0, 10], 'r--') # 参考线
plt.title('Q-Q Plot against Uniform Distribution')
plt.xlabel('Theoretical Quantiles')
plt.ylabel('Sample Quantiles')
# 子图4:均匀分布样本的散点图(对比两个均匀分布样本)
plt.subplot(2, 2, 4)
data2 = uniform.rvs(size=1000, loc=0, scale=10)
plt.scatter(data, data2, color='orange', edgecolor='black', alpha=0.6)
plt.title('Scatter Plot of Two Uniform Distributions')
plt.xlabel('Data1')
plt.ylabel('Data2')
# 调整布局
plt.tight_layout()
plt.show()
-
数据生成:使用 scipy.stats.uniform.rvs生成了 1000 个在[0, 10)区间内的均匀分布样本数据。 -
直方图和KDE图:在第一个子图中,使用了Seaborn库的 histplot函数绘制直方图,并叠加了核密度估计曲线(KDE)。 -
累积分布函数(CDF):在第二个子图中,使用 ecdfplot函数绘制累积分布函数图。 -
Q-Q图:在第三个子图中,将样本数据的分位数与标准均匀分布的分位数进行了对比,绘制了Q-Q图,并加上了参考线。 -
散点图:在第四个子图中,生成了第二组均匀分布数据,并将两组数据绘制成散点图。
3. 伯努利分布 (Bernoulli Distribution)
伯努利分布描述了二元(0或1)随机变量的分布,常用于二分类问题的建模。
原理
伯努利分布是一个离散分布,用于表示单次试验的两个可能结果(如成功或失败)。
核心公式
其中,p 是成功的概率。
推导:
-
假设一次试验只有两个可能结果:成功(1)和失败(0),成功的概率为 p。 -
通过列举法,可以直接得出成功的概率为 p,失败的概率为 1-p。 -
因为只有两种结果,所以公式直接由组合的性质推导得出。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 设置随机种子
np.random.seed(42)
# 生成一个虚拟数据集,包含1000个伯努利分布的数据点
p = 0.3 # 成功的概率
n = 1000
data = np.random.binomial(1, p, n)
# 创建一个DataFrame
df = pd.DataFrame(data, columns=['Outcome'])
# 计算统计量
success_count = df['Outcome'].sum()
failure_count = n - success_count
probabilities = df['Outcome'].value_counts(normalize=True)
mean = df['Outcome'].mean()
variance = df['Outcome'].var()
# 设置画布大小
plt.figure(figsize=(15, 10))
# 图1:直方图(Histogram)
plt.subplot(2, 2, 1)
sns.histplot(df['Outcome'], bins=2, kde=False)
plt.title('Histogram of Bernoulli Distribution')
plt.xlabel('Outcome')
plt.ylabel('Frequency')
plt.xticks([0, 1], labels=['Failure (0)', 'Success (1)'])
# 图2:概率质量函数(PMF)
plt.subplot(2, 2, 2)
sns.barplot(x=probabilities.index, y=probabilities.values, palette='viridis')
plt.title('Probability Mass Function (PMF)')
plt.xlabel('Outcome')
plt.ylabel('Probability')
plt.xticks([0, 1], labels=['Failure (0)', 'Success (1)'])
# 图3:箱型图(Box Plot)
plt.subplot(2, 2, 3)
sns.boxplot(x=df['Outcome'], palette='viridis')
plt.title('Box Plot of Outcomes')
plt.xlabel('Outcome')
plt.xticks([0, 1], labels=['Failure (0)', 'Success (1)'])
# 图4:统计量
plt.subplot(2, 2, 4)
stats_text = f"Sample Size: {n}\nSuccess Count: {success_count}\nFailure Count: {failure_count}\nMean: {mean:.2f}\nVariance: {variance:.2f}"
plt.text(0.1, 0.5, stats_text, fontsize=14, verticalalignment='center', bbox=dict(facecolor='lightgrey', alpha=0.5))
plt.axis('off')
plt.title('Summary Statistics')
# 调整布局
plt.tight_layout()
# 显示图形
plt.show()
-
数据生成:使用 np.random.binomial生成一个1000个数据点的伯努利分布数据集,成功的概率p=0.3。 -
统计分析:计算数据集的统计量,包括成功次数、失败次数、均值和方差。 -
可视化: -
直方图:显示伯努利分布结果的频数。 -
概率质量函数(PMF):显示每个结果(0和1)的概率。 -
箱型图:显示数据分布的箱型图。 -
统计量摘要:以文本形式展示统计量的摘要。
4. 二项分布 (Binomial Distribution)
二项分布描述了一系列独立伯努利试验中成功次数的分布。
原理
二项分布是多次独立伯努利试验的结果,研究的是在n次试验中成功的次数。
核心公式
其中, ,p 是成功的概率,n 是试验次数,k 是成功次数。
推导:
-
对于n次独立的伯努利试验,成功k次的概率是 。 -
失败的次数为 ,因此失败的概率是 。 -
成功k次的排列组合方式为 ,将这些组合起来,得到二项分布公式。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import binom
# 设置随机种子以确保结果可重复
np.random.seed(42)
# 二项分布参数设置
n = 20 # 试验次数
p = 0.5 # 每次试验成功的概率
# 生成二项分布的虚拟数据集
data = np.random.binomial(n, p, size=1000)
# 计算概率质量函数(PMF)
x = np.arange(0, n+1)
pmf = binom.pmf(x, n, p)
# 创建图形
plt.figure(figsize=(14, 8))
# 子图1: 二项分布的PMF
plt.subplot(2, 2, 1)
plt.stem(x, pmf, basefmt=" ")
plt.title('Probability Mass Function (PMF)')
plt.xlabel('Number of successes')
plt.ylabel('Probability')
plt.grid()
# 子图2: 样本数据的直方图
plt.subplot(2, 2, 2)
sns.histplot(data, bins=n+1, kde=False, color='skyblue')
plt.title('Histogram of Sample Data')
plt.xlabel('Number of successes')
plt.ylabel('Frequency')
plt.grid()
# 子图3: 样本数据的累积分布函数(CDF)
plt.subplot(2, 2, 3)
sns.ecdfplot(data, color='red')
plt.title('Cumulative Distribution Function (CDF)')
plt.xlabel('Number of successes')
plt.ylabel('Cumulative Probability')
plt.grid()
# 调整子图间距
plt.tight_layout()
plt.show()
-
数据生成: np.random.binomial(n, p, size=1000)生成了1000个来自二项分布的数据,参数n是试验次数,p是每次试验成功的概率。 -
PMF计算与绘制: binom.pmf(x, n, p)计算了0到n次成功的概率质量函数(PMF),并使用plt.stem()绘制。 -
样本数据直方图:使用 seaborn库中的histplot绘制数据的直方图,展示不同成功次数出现的频率。 -
累积分布函数(CDF):使用 seaborn库中的ecdfplot绘制数据的累积分布函数,展示成功次数小于等于某个值的累计概率。
5. 多项分布 (Multinomial Distribution)
多项分布是二项分布的推广,用于描述每次试验有多种可能结果的情况。
原理
在一次试验中,多项分布研究的是多种类别中每种类别的出现次数。
核心公式
其中, 是第i类的概率, 是第i类的出现次数,n是试验总次数。
推导:
-
将二项分布扩展到多种可能结果的情况下,考虑每种结果的概率 和出现次数 。 -
使用组合数 表示这些事件的可能排列。 -
通过与二项分布类似的计算,得出多项分布的公式。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import multinomial
# 设置随机种子以确保结果可复现
np.random.seed(42)
# 定义多项分布的参数
n = 1000 # 实验总次数
p = [0.1, 0.3, 0.2, 0.15, 0.25] # 每个类别的概率
# 生成多项分布的数据
data = multinomial.rvs(n=n, p=p, size=1)[0]
# 创建类别标签
categories = ['Category A', 'Category B', 'Category C', 'Category D', 'Category E']
# 创建一个2x2的子图布局
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 绘制条形图
sns.barplot(x=categories, y=data, palette='viridis', ax=axes[0, 0])
axes[0, 0].set_title('Bar Plot of Category Counts')
axes[0, 0].set_xlabel('Category')
axes[0, 0].set_ylabel('Counts')
# 绘制饼图
axes[0, 1].pie(data, labels=categories, autopct='%1.1f%%', colors=sns.color_palette('viridis', len(categories)))
axes[0, 1].set_title('Pie Chart of Category Proportions')
# 绘制累积条形图
cumulative_data = np.cumsum(data)
sns.barplot(x=categories, y=cumulative_data, palette='viridis', ax=axes[1, 0])
axes[1, 0].set_title('Cumulative Bar Plot')
axes[1, 0].set_xlabel('Category')
axes[1, 0].set_ylabel('Cumulative Counts')
# 绘制各类别的分布情况
sns.histplot(data, bins=10, kde=True, color='purple', ax=axes[1, 1])
axes[1, 1].set_title('Distribution of Counts Across Categories')
axes[1, 1].set_xlabel('Counts')
axes[1, 1].set_ylabel('Frequency')
# 调整布局
plt.tight_layout()
plt.show()
-
数据生成: 使用 scipy.stats.multinomial.rvs函数生成虚拟的多项分布数据,数据来自于一个有5个类别的实验,每个类别的概率不同。 -
可视化: 生成的数据通过4种图形进行可视化,包括条形图、饼图、累积条形图以及直方图: -
条形图展示了每个类别的计数。 -
饼图展示了每个类别的比例。 -
累积条形图展示了累积的类别计数。 -
直方图展示了类别计数的分布情况。
6. 指数分布 (Exponential Distribution)
指数分布描述了事件发生时间间隔的分布,常用于建模无记忆性随机过程。
原理
指数分布是泊松过程的等待时间分布,具有无记忆性,即过去不影响未来事件的概率。
核心公式
其中,λ是速率参数(事件发生的频率)。
推导:
-
设想一个泊松过程,计算下一次事件发生的时间间隔。 -
利用泊松过程的性质,推导出无记忆性的性质,即过去不影响未来。 -
通过微分方程求解,得到指数分布的密度函数。
Python实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 设置随机种子以确保可重复性
np.random.seed(42)
# 生成虚拟数据集(指数分布)
lambda_param = 1.5 # 参数lambda
size = 1000 # 数据集大小
data = np.random.exponential(scale=1/lambda_param, size=size)
# 将数据转换为DataFrame
df = pd.DataFrame(data, columns=['Exponential'])
# 创建图形对象
fig, axs = plt.subplots(2, 2, figsize=(14, 10))
# 图1:直方图 + KDE
sns.histplot(df['Exponential'], kde=True, ax=axs[0, 0], color='skyblue')
axs[0, 0].set_title('Histogram + KDE of Exponential Distribution')
# 图2:累积分布函数(CDF)
sns.ecdfplot(df['Exponential'], ax=axs[0, 1], color='green')
axs[0, 1].set_title('Empirical CDF of Exponential Distribution')
# 图3:箱线图
sns.boxplot(data=df, ax=axs[1, 0], color='lightcoral')
axs[1, 0].set_title('Boxplot of Exponential Distribution')
# 图4:Q-Q 图
from scipy import stats
stats.probplot(df['Exponential'], dist="expon", plot=axs[1, 1])
axs[1, 1].set_title('Q-Q Plot of Exponential Distribution')
# 调整布局
plt.tight_layout()
plt.show()
-
生成虚拟数据:使用 np.random.exponential生成具有指定lambda参数的指数分布数据集。 -
绘制多个图形: -
图1:直方图与核密度估计(KDE)曲线,展示数据的分布。 -
图2:累积分布函数(CDF),展示数据的累计概率。 -
图3:箱线图,展示数据的四分位数和潜在的异常值。 -
图4:Q-Q 图,用于检验数据是否与指数分布的理论分布匹配。
7. 泊松分布 (Poisson Distribution)
泊松分布用于描述在固定时间或空间区域内事件发生的次数。
原理
泊松分布是描述随机事件在固定时间或空间内发生的次数,其特点是时间间隔的独立性和等方差性。
核心公式
其中,λ是期望值(单位时间内的平均发生次数)。
推导:
-
考虑一个时间段内发生k次事件的概率。 -
假设事件发生的概率在时间段中是均匀的,利用极限思想(时间段趋近于0),求出泊松分布的概率。 -
最后,结合组合计数法,得到泊松分布的公式。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import poisson
# 设置泊松分布的参数
lambda_ = 5 # λ是泊松分布的均值,也就是事件发生的平均次数
# 生成泊松分布的随机样本
np.random.seed(42)
data = np.random.poisson(lambda_, 1000)
# 设置画布大小
plt.figure(figsize=(14, 10))
# 图1:数据的直方图
plt.subplot(2, 2, 1)
sns.histplot(data, bins=range(0, max(data)+2), kde=False, color='skyblue')
plt.title('Poisson Distribution Histogram')
plt.xlabel('Number of Events')
plt.ylabel('Frequency')
# 图2:数据的折线图
plt.subplot(2, 2, 2)
unique_values, counts = np.unique(data, return_counts=True)
plt.plot(unique_values, counts, marker='o', linestyle='-', color='green')
plt.title('Frequency Line Plot')
plt.xlabel('Number of Events')
plt.ylabel('Frequency')
# 图3:泊松分布的概率质量函数(PMF)
plt.subplot(2, 2, 3)
x = np.arange(0, 20)
pmf = poisson.pmf(x, lambda_)
plt.bar(x, pmf, color='orange')
plt.title('Poisson Distribution PMF')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
# 图4:理论PMF与样本数据的对比
plt.subplot(2, 2, 4)
plt.plot(x, pmf * len(data), marker='o', linestyle='-', color='red', label='Theoretical PMF')
plt.plot(unique_values, counts, marker='x', linestyle='--', color='blue', label='Sample Data')
plt.title('Theoretical PMF vs Sample Data')
plt.xlabel('Number of Events')
plt.ylabel('Count')
plt.legend()
# 调整布局并显示图像
plt.tight_layout()
plt.show()
-
泊松分布生成数据:使用 np.random.poisson函数生成泊松分布随机样本,参数为lambda_和样本数量。 -
数据可视化:代码包含四个子图: -
图1: 泊松分布样本数据的直方图,展示事件发生次数的频率分布。 -
图2: 样本数据的折线图,用于观察频率的趋势变化。 -
图3: 泊松分布的概率质量函数(PMF),显示每个事件发生次数的理论概率。 -
图4: 理论PMF与样本数据频率的对比,展示样本数据与理论分布的一致性。
8. 伽马分布 (Gamma Distribution)
伽马分布用于模型事件之间时间的分布以及正数随机变量。
原理
伽马分布是连续随机变量的分布,常用于建模多个指数分布变量之和的情况。
核心公式
其中,α是形状参数,β是尺度参数,Γ(α)是伽马函数。
推导:
-
伽马分布可以视为多个独立同分布的指数分布随机变量的和。 -
使用拉普拉斯变换或其他积分方法,可以推导出伽马分布的概率密度函数。 -
伽马函数作为归一化常数来确保总概率为1。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import gamma
# 设置随机种子以确保可重复性
np.random.seed(42)
# 伽马分布的参数
shape, scale = 2.0, 2.0 # α (shape) = 2.0, θ (scale) = 2.0
# 生成伽马分布的随机样本
data = gamma.rvs(a=shape, scale=scale, size=1000)
# 创建图形和子图
fig, axs = plt.subplots(2, 2, figsize=(12, 10))
# 子图1:伽马分布的概率密度函数 (PDF)
x = np.linspace(0, 20, 1000)
pdf = gamma.pdf(x, a=shape, scale=scale)
axs[0, 0].plot(x, pdf, 'r-', lw=2, label=f'Gamma PDF\nα={shape}, θ={scale}')
axs[0, 0].fill_between(x, pdf, color='red', alpha=0.3)
axs[0, 0].set_title('Probability Density Function (PDF)')
axs[0, 0].legend()
# 子图2:伽马分布样本的直方图
sns.histplot(data, kde=False, bins=30, color='blue', ax=axs[0, 1], stat="density")
axs[0, 1].set_title('Histogram of Gamma Distributed Data')
axs[0, 1].set_ylabel('Density')
# 子图3:伽马分布样本的核密度估计 (KDE)
sns.kdeplot(data, color='green', lw=2, ax=axs[1, 0])
axs[1, 0].set_title('Kernel Density Estimate (KDE)')
axs[1, 0].set_ylabel('Density')
# 子图4:样本的累积分布函数 (CDF)
cdf = gamma.cdf(x, a=shape, scale=scale)
axs[1, 1].plot(x, cdf, 'b-', lw=2, label='CDF')
axs[1, 1].set_title('Cumulative Distribution Function (CDF)')
axs[1, 1].legend()
# 调整布局
plt.tight_layout()
plt.show()
-
子图1:显示伽马分布的概率密度函数 (PDF),并填充下面的区域。 -
子图2:显示伽马分布样本的直方图,可以直观感受到数据的分布情况。 -
子图3:显示伽马分布样本的核密度估计 (KDE),以更平滑的曲线展示数据分布。 -
子图4:显示伽马分布样本的累积分布函数 (CDF),描述了数据小于等于某个值的概率。
使用了伽马分布的随机样本,展示了伽马分布的不同方面。
9. Beta分布 (Beta Distribution)
Beta分布常用于表示概率参数的先验分布,在贝叶斯推断中有重要应用。
原理
Beta分布是定义在[0,1]区间上的连续概率分布,常用于建模概率事件的先验分布。
核心公式
其中,α和β是形状参数,B(α, β)是Beta函数。
推导:
-
Beta分布源自于Beta函数,这是一种归一化的超几何积分。 -
使用Gamma函数的性质,Beta分布可以表示为Gamma分布的比率。 -
最终得到Beta分布的概率密度函数。
Python实现
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta
# 参数设置
alpha_1, beta_1 = 2, 5
alpha_2, beta_2 = 5, 2
# 生成x值
x = np.linspace(0, 1, 1000)
# 计算PDF(概率密度函数)
pdf_1 = beta.pdf(x, alpha_1, beta_1)
pdf_2 = beta.pdf(x, alpha_2, beta_2)
# 计算CDF(累积分布函数)
cdf_1 = beta.cdf(x, alpha_1, beta_1)
cdf_2 = beta.cdf(x, alpha_2, beta_2)
# 生成随机样本数据
samples_1 = beta.rvs(alpha_1, beta_1, size=1000)
samples_2 = beta.rvs(alpha_2, beta_2, size=1000)
# 创建图形和子图
fig, axs = plt.subplots(2, 2, figsize=(14, 10))
# 绘制PDF
axs[0, 0].plot(x, pdf_1, 'r-', label=f'Beta({alpha_1}, {beta_1}) PDF')
axs[0, 0].plot(x, pdf_2, 'b-', label=f'Beta({alpha_2}, {beta_2}) PDF')
axs[0, 0].set_title('Probability Density Function (PDF)')
axs[0, 0].legend()
# 绘制CDF
axs[0, 1].plot(x, cdf_1, 'r-', label=f'Beta({alpha_1}, {beta_1}) CDF')
axs[0, 1].plot(x, cdf_2, 'b-', label=f'Beta({alpha_2}, {beta_2}) CDF')
axs[0, 1].set_title('Cumulative Distribution Function (CDF)')
axs[0, 1].legend()
# 绘制直方图
axs[1, 0].hist(samples_1, bins=30, alpha=0.5, color='red', label=f'Beta({alpha_1}, {beta_1}) Samples')
axs[1, 0].hist(samples_2, bins=30, alpha=0.5, color='blue', label=f'Beta({alpha_2}, {beta_2}) Samples')
axs[1, 0].set_title('Histogram of Samples')
axs[1, 0].legend()
# 绘制随机样本散点图
axs[1, 1].scatter(range(1000), samples_1, alpha=0.5, color='red', label=f'Beta({alpha_1}, {beta_1}) Samples')
axs[1, 1].scatter(range(1000), samples_2, alpha=0.5, color='blue', label=f'Beta({alpha_2}, {beta_2}) Samples')
axs[1, 1].set_title('Scatter Plot of Samples')
axs[1, 1].legend()
# 设置总体图标题
fig.suptitle('Beta Distribution Analysis', fontsize=16)
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
-
参数设置:我们定义了两个不同的Beta分布参数组合
(alpha_1, beta_1)和(alpha_2, beta_2)。 -
生成数据:
-
x是从0到1之间的1000个点,用于计算PDF和CDF。 -
使用 beta.pdf()函数计算概率密度函数(PDF)。 -
使用 beta.cdf()函数计算累积分布函数(CDF)。 -
使用 beta.rvs()函数生成1000个随机样本,用于绘制直方图和散点图。 -
图形绘制:
-
PDF图展示了两组参数下的Beta分布的概率密度。 -
CDF图展示了对应的累积分布函数。 -
直方图展示了随机样本数据的分布。 -
散点图展示了生成的随机样本数据。
10. Dirichlet分布 (Dirichlet Distribution)
Dirichlet分布是多项分布的共轭先验分布,广泛应用于贝叶斯模型和主题模型中。
原理
Dirichlet分布是多变量的连续分布,用于表示多项分布参数的概率分布。
核心公式
其中, 是归一化常数,由Gamma函数构成。
推导:
-
Dirichlet分布是Beta分布在多维空间的推广。 -
使用Gamma函数和多项式分布的性质,推导出Dirichlet分布的公式。 -
其归一化常数由高维的Gamma函数表示,确保概率总和为1。
Python实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 设置随机种子
np.random.seed(42)
# 生成Dirichlet分布数据
alpha = np.array([2, 5, 3, 7]) # 参数向量
data = np.random.dirichlet(alpha, size=1000)
# 计算每个组别的均值
mean_values = np.mean(data, axis=0)
# 图1:不同组别的分布(条形图)
plt.figure(figsize=(18, 6))
plt.subplot(1, 3, 1)
sns.barplot(x=np.arange(1, len(alpha)+1), y=mean_values, palette="Set2")
plt.title("Mean Proportion of Each Category")
plt.xlabel("Category")
plt.ylabel("Mean Proportion")
# 图2:数据的散点图(散点图)
plt.subplot(1, 3, 2)
plt.scatter(data[:, 0], data[:, 1], alpha=0.5, s=10, c=data[:, 2], cmap='viridis')
plt.colorbar(label="Category 3 Proportion")
plt.title("Scatter plot of Category 1 vs. Category 2")
plt.xlabel("Category 1 Proportion")
plt.ylabel("Category 2 Proportion")
# 图3:饼图展示一个样本的比例
plt.subplot(1, 3, 3)
sample_idx = np.random.choice(range(1000))
plt.pie(data[sample_idx], labels=[f'Category {i+1}' for i in range(len(alpha))], autopct='%1.1f%%', colors=sns.color_palette("Set2"))
plt.title(f"Sample {sample_idx} Proportion Distribution")
plt.tight_layout()
plt.show()
-
条形图:显示各个类别的均值,这有助于我们理解不同组别之间的相对比例分布。 -
散点图:显示类别1与类别2之间的散点分布,并通过颜色区分类别3的比例。这种图形有助于我们理解两个类别之间的相关性。 -
饼图:展示一个随机样本中不同组别的比例分布。这有助于可视化单个数据点的具体分布情况。
最后
——————概率游戏 ——————
概率资本:概率资本涉足全球化投资组合,包括多市场、多渠道、多产品。具体表现为股票(A股、港股、美股及其他国家二级市场)、期货、外汇、及一级股权投资市场。
顺势概率:趋势不会轻易形成,也不会轻易结束,一两个涨停跌停不足以改变趋势。顺势而为,概率优势是交易的理念。耐心等待属于自己的交易机会,赚自己看得懂的钱。
发布频率:一般情况下,每两周筛选一次(周二左右),特殊情况下会有所调整;心态及文章分享会不定时发送。
入场时机:交易机会不是做出来的,是等出来的。每次发布的入场时机基于第一入场时机原则,如果错过第一入场时机,就耐心等待下一个机会;下一次发布的时候如果入场机会还在,会继续入选,但如果有一段涨幅,可能就不再入选,但并不代表该标的没有继续上涨的机会,只是错过第一入场时机,激进的朋友可以追进去。这市场不缺机会,缺的是等待机会的耐心。
投资组合:每次发布交易机会列表会把符合交易机会的交易标的全部筛选出来,对数量没有强制要求。没有强制规定一次只能选20个、30个或者50个,如果一个都不符合,可能一个也不发布,如果都符合,可能都会发布,和数量无关,只和是否符合交易原则有关。
等待原则:弱水三千,只取一瓢饮。提高赢面,学会等待,放弃一切似是而非的机会;放弃、放弃、还是放弃, 放弃看不懂的复杂趋势;等待、等待、还是等待,等待能看懂的简单趋势。静静地等待,等待完全符合规则的机会出现,等待概率优势的机会出现,等待属于自己的机会。在等待概率优势机会的过程中,必须经得起各种诱惑,不要妄想抓住所有机会,只赚属于自己的钱,只交易属于自己的交易机会。
统计世界:万物有周期、世事有轮回。周期、轮回、钟摆。万事万物皆可统计,统计,世界,统计世界;世界,统计,世界统计;大盘统计,统计大盘;大盘追踪,追踪大盘。多市场、多品种、多产品、多周期、多技术、多角度、多维度、多层次、多种类、多世界、多技术指标、多统计、多追踪。多维度多角度进行统计、个体、全体、局部、全局、一个维度、两个维度、多个维度、不同角度。1个统计不够,来两个,两个统计不够来一百个,一百个不够来一万个。多高度、多角度、多维度统计。大盘统计、大盘追踪,这世界没什么不能统计的。万物相通,周期轮回,在统计的过程中,你会有意无意发现这世界的奥妙规律。
利弗莫尔:如果这一辈子我在投资交易中没有成功,并不是我没有这个能力,而是我自己不想成功。因为我已经知道了在市场中赢钱的办法:只要我有足够的耐心等待,只在市场的走势符合我的经验和理论,只在我有把握的范围内才行动,我就能赚到钱。而且,那样的机会早晚会出现的。如果我的投机事业最终失败了,肯定是因为我违背了自己的交易方法和经验教训,做了大量我自己也认为是错误的交易。例如,被市场走势诱惑追涨杀跌,无法控制自己贪婪的交易欲望,逆势交易,等等。
合作机会:资方、机构合作,可以直接留言。
欢迎关注微信公众号,后台回复【真实姓名-机构-职位-联系方式】加入概率资本交易圈。


