第二章 机器学习基础理论 - 数学基础(二)
三、概率论基础


文章目录
前面python的基础内容算是完成了,接下来将要进入机器学习部分了。
具体的专栏内容请参考:
人工智能专栏
3.1 概率分布与随机变量
3.1.1 概率分布的定义与类型
概率分布描述了随机变量取不同值的概率规律,在护理研究中用于建模患者特征和治疗效果。
理论推导:
-
离散型随机变量:概率质量函数(PMF) P ( X = x ) P(X = x) P(X=x)
-
连续型随机变量:概率密度函数(PDF) f ( x ) f(x) f(x),满足 ∫ − ∞ ∞ f ( x ) d x = 1 \int_{-\infty}^{\infty} f(x)dx = 1 ∫−∞∞f(x)dx=1
护理案例:
在青少年抑郁症研究中,我们可能遇到以下分布:
-
二项分布:某班级中患抑郁症的人数
-
正态分布:HAMD 评分的总体分布
-
泊松分布:特定时间内自杀念头出现的次数
3.1.2 常见概率分布及其应用
理论推导:
-
二项分布: P ( X = k ) = C ( n , k ) p k ( 1 − p ) n − k P(X = k) = C(n, k)p^k(1-p)^{n-k} P(X=k)=C(n,k)pk(1−p)n−k
-
正态分布: f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2πσ1e−2σ2(x−μ)2
-
泊松分布: P ( X = k ) = λ k e − λ k ! P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!} P(X=k)=k!λke−λ
护理案例:
假设青少年抑郁症患病率为 15%,计算 100 名学生中恰好有 10 人患病的概率。
PyCharm 操作:
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 1. 二项分布示例:青少年抑郁症患病率
n_students = 100
p_depression = 0.15
k_values = np.arange(0, n_students + 1, 5)
# 计算概率质量函数
binomial_pmf = stats.binom.pmf(k_values, n_students, p_depression)
print("二项分布示例:100名学生中患抑郁症人数的概率")
for k, prob in zip(k_values, binomial_pmf):
print(f"恰好{k}人患病:P = {prob:.4f}")
# 2. 正态分布示例:HAMD评分分布
mu_hamd = 18 # 平均HAMD评分
sigma_hamd = 5 # 标准差
x_hamd = np.linspace(mu_hamd - 3*sigma_hamd, mu_hamd + 3*sigma_hamd, 1000)
normal_pdf = stats.norm.pdf(x_hamd, mu_hamd, sigma_hamd)
print(f"\n正态分布示例:HAMD评分分布")
print(f"均值μ = {mu_hamd},标准差σ = {sigma_hamd}")
print(f"评分>25分的概率:{1 - stats.norm.cdf(25, mu_hamd, sigma_hamd):.4f}")
print(f"评分在10-25分之间的概率:{stats.norm.cdf(25, mu_hamd, sigma_hamd) - stats.norm.cdf(10, mu_hamd, sigma_hamd):.4f}")
# 3. 泊松分布示例:自杀念头出现次数
lambda_suicide = 2.5 # 平均每天出现2.5次自杀念头
k_suicide = np.arange(0, 10)
poisson_pmf = stats.poisson.pmf(k_suicide, lambda_suicide)
print(f"\n泊松分布示例:每天自杀念头出现次数")
for k, prob in zip(k_suicide, poisson_pmf):
print(f"每天出现{k}次的概率:{prob:.4f}")
plt.tight_layout()
plt.show()




3.2 随机变量的数字特征
随机变量的数字特征包括期望、方差等,用于描述随机变量的集中趋势和离散程度。
3.2.1 期望与方差
理论推导:
- 期望(均值):
-
离散型: E [ X ] = ∑ x x P ( X = x ) E[X] = \sum_x xP(X=x) E[X]=∑xxP(X=x)
-
连续型: E [ X ] = ∫ − ∞ ∞ x f ( x ) d x E[X] = \int_{-\infty}^{\infty} xf(x)dx E[X]=∫−∞∞xf(x)dx
- 方差:
- V a r ( X ) = E [ ( X − E [ X ] ) 2 ] = E [ X 2 ] − ( E [ X ] ) 2 Var(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2 Var(X)=E[(X−E[X])2]=E[X2]−(E[X])2
- 协方差: C o v ( X , Y ) = E [ ( X − E [ X ] ) ( Y − E [ Y ] ) ] Cov(X,Y) = E[(X-E[X])(Y-E[Y])] Cov(X,Y)=E[(X−E[X])(Y−E[Y])]
护理案例:
计算青少年抑郁症患者的平均年龄、HAMD 评分的方差、年龄与评分的协方差。
3.2.2 协方差与相关系数
理论推导:
相关系数: ρ X Y = C o v ( X , Y ) σ X σ Y \rho_{XY} = \frac{Cov(X,Y)}{\sigma_X \sigma_Y} ρXY=σXσYCov(X,Y)
相关系数的取值范围为 [-1, 1],表示两个变量之间线性关系的强度和方向。
护理案例:
分析青少年抑郁症患者的年龄与 HAMD 评分的相关性,以及不同症状之间的相关性。
PyCharm 操作:
# 随机变量数字特征计算
import numpy as np
# 创建患者数据(年龄、HAMD评分、性别)
np.random.seed(42)
n_patients = 100
# 年龄(12-18岁)
ages = np.random.randint(12, 19, n_patients)
# HAMD评分(与年龄相关)
# 年龄越大,HAMD评分越高(轻度相关)
hamd_scores = 15 + 0.5 * ages + np.random.normal(0, 3, n_patients)
hamd_scores = np.clip(hamd_scores, 5, 40) # 限制在合理范围内
# 性别(0-1)
genders = np.random.randint(0, 2, n_patients)
# 计算期望(均值)
mean_age = np.mean(ages)
mean_hamd = np.mean(hamd_scores)
print("患者基本统计信息:")
print(f"平均年龄:{mean_age:.1f}岁")
print(f"平均HAMD评分:{mean_hamd:.1f}分")
# 计算方差和标准差
var_age = np.var(ages)
std_age = np.std(ages)
var_hamd = np.var(hamd_scores)
std_hamd = np.std(hamd_scores)
print(f"年龄方差:{var_age:.1f}")
print(f"年龄标准差:{std_age:.1f}")
print(f"HAMD方差:{var_hamd:.1f}")
print(f"HAMD标准差:{std_hamd:.1f}")
# 计算协方差
cov_age_hamd = np.cov(ages, hamd_scores)[0, 1]
print(f"年龄与HAMD评分协方差:{cov_age_hamd:.1f}")
# 计算相关系数
corr_age_hamd = np.corrcoef(ages, hamd_scores)[0, 1]
print(f"年龄与HAMD评分相关系数:{corr_age_hamd:.3f}")
# 计算不同性别的统计信息
female_mask = (genders == 0)
male_mask = (genders == 1)
print(f"\n女性患者({np.sum(female_mask)}人):")
print(f"平均年龄:{np.mean(ages[female_mask]):.1f}岁")
print(f"平均HAMD评分:{np.mean(hamd_scores[female_mask]):.1f}分")
print(f"\n男性患者({np.sum(male_mask)}人):")
print(f"平均年龄:{np.mean(ages[male_mask]):.1f}岁")
print(f"平均HAMD评分:{np.mean(hamd_scores[male_mask]):.1f}分")
# 创建症状相关矩阵(基于真实研究数据)
# 5个主要症状:抑郁情绪、睡眠障碍、食欲改变、疲劳、注意力集中困难
symptom_names = ['抑郁情绪', '睡眠障碍', '食欲改变', '疲劳', '注意力集中困难']
n_symptoms = len(symptom_names)
# 生成相关的症状数据
correlation_matrix = np.array([
[1.0, 0.6, 0.5, 0.7, 0.6],
[0.6, 1.0, 0.4, 0.5, 0.5],
[0.5, 0.4, 1.0, 0.3, 0.4],
[0.7, 0.5, 0.3, 1.0, 0.6],
[0.6, 0.5, 0.4, 0.6, 1.0]
])
# 生成100名患者的症状评分(基于多元正态分布)
np.random.seed(42)
mean_scores = np.array([2.5, 2.0, 1.8, 2.2, 2.1]) # 各症状平均评分
symptom_data = np.random.multivariate_normal(mean_scores, correlation_matrix, n_patients)
symptom_data = np.clip(symptom_data, 0, 4) # 限制在0-4分范围
# 计算症状间的相关系数矩阵
correlation_matrix_sample = np.corrcoef(symptom_data.T)
print("\n症状相关系数矩阵(样本):")
print(np.round(correlation_matrix_sample, 3))




3.3 贝叶斯定理
贝叶斯定理是概率论中的重要定理,在机器学习的贝叶斯分类器中有着核心应用。
3.3.1 贝叶斯定理的数学推导
理论推导:
贝叶斯定理的基本形式:
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)
全概率公式:
P ( B ) = ∑ i P ( B ∣ A i ) P ( A i ) P(B) = \sum_i P(B|A_i)P(A_i) P(B)=∑iP(B∣Ai)P(Ai)
扩展形式:
P ( A i ∣ B ) = P ( B ∣ A i ) P ( A i ) ∑ j P ( B ∣ A j ) P ( A j ) P(A_i|B) = \frac{P(B|A_i)P(A_i)}{\sum_j P(B|A_j)P(A_j)} P(Ai∣B)=∑jP(B∣Aj)P(Aj)P(B∣Ai)P(Ai)
3.3.2 贝叶斯推断在护理诊断中的应用
在护理诊断中,贝叶斯定理可以用于根据症状推断疾病概率。
护理案例:
青少年抑郁症诊断:
-
已知青少年抑郁症患病率为 15%
-
抑郁症患者出现持续悲伤症状的概率为 80%
-
非抑郁症青少年出现悲伤症状的概率为 20%
-
如果一个青少年出现悲伤症状,他患抑郁症的概率是多少?
PyCharm 操作:
# 贝叶斯定理在护理诊断中的应用
import numpy as np
# 案例1:青少年抑郁症诊断
print("案例1:青少年抑郁症诊断")
# 定义概率
p_depression = 0.15 # 抑郁症患病率
p_sad_given_depression = 0.80 # 抑郁症患者出现悲伤的概率
p_sad_given_not_depression = 0.20 # 非抑郁症青少年出现悲伤的概率
# 计算后验概率
p_depression_given_sad = (p_sad_given_depression * p_depression) / (
p_sad_given_depression * p_depression + p_sad_given_not_depression * (1 - p_depression)
)
print(f"先验概率:P(抑郁症) = {p_depression:.0%}")
print(f"似然度:P(悲伤|抑郁症) = {p_sad_given_depression:.0%}")
print(f"似然度:P(悲伤|非抑郁症) = {p_sad_given_not_depression:.0%}")
print(f"后验概率:P(抑郁症|悲伤) = {p_depression_given_sad:.0%}")
# 案例2:多种症状的贝叶斯诊断
print("\n案例2:多种症状的贝叶斯诊断")
# 定义症状和疾病概率
symptoms = ['悲伤', '睡眠障碍', '食欲改变']
disease_prob = {
'抑郁症': 0.15,
'焦虑症': 0.10,
'正常': 0.75
}
# 条件概率:P(症状|疾病)
conditional_prob = {
'悲伤': {
'抑郁症': 0.80,
'焦虑症': 0.60,
'正常': 0.10
},
'睡眠障碍': {
'抑郁症': 0.70,
'焦虑症': 0.75,
'正常': 0.15
},
'食欲改变': {
'抑郁症': 0.60,
'焦虑症': 0.30,
'正常': 0.10
}
}
# 患者出现的症状
patient_symptoms = ['悲伤', '睡眠障碍']
# 计算后验概率
posterior_prob = {}
for disease in disease_prob:
# 计算联合概率 P(症状|疾病) * P(疾病)
joint_prob = disease_prob[disease]
for symptom in patient_symptoms:
joint_prob *= conditional_prob[symptom][disease]
posterior_prob[disease] = joint_prob
# 归一化得到后验概率
total = sum(posterior_prob.values())
for disease in posterior_prob:
posterior_prob[disease] /= total
print("\n患者症状:", ', '.join(patient_symptoms))
print("\n疾病概率分布:")
for disease, prob in posterior_prob.items():
print(f"P({disease}|症状) = {prob:.0%}")
# 案例3:贝叶斯更新过程
print("\n案例3:贝叶斯更新过程演示")
# 初始先验概率
prior = 0.15
print(f"初始先验概率:P(抑郁症) = {prior:.0%}")
# 依次加入症状证据
for symptom in symptoms:
# 计算似然比
likelihood_ratio = conditional_prob[symptom]['抑郁症'] / conditional_prob[symptom]['正常']
# 贝叶斯更新:后验 = 先验 * 似然比
prior = prior * likelihood_ratio / (prior * likelihood_ratio + (1 - prior))
print(f"加入症状'{symptom}'后:P(抑郁症|症状) = {prior:.0%}")
# 案例4:贝叶斯参数估计(治疗效果)
print("\n案例4:贝叶斯参数估计(药物治疗效果)")
# 假设我们有一个新药试验
# 先验分布:使用Beta分布,参数α=2, β=8(表示成功率约20%)
alpha_prior = 2
beta_prior = 8
# 试验结果:治疗20人,12人有效
successes = 12
trials = 20
# 后验分布参数
alpha_post = alpha_prior + successes
beta_post = beta_prior + (trials - successes)
print(f"\n先验分布:Beta({alpha_prior}, {beta_prior})")
print(f"试验结果:{successes}人有效 / {trials}人")
print(f"后验分布:Beta({alpha_post}, {beta_post})")
# 计算后验均值
posterior_mean = alpha_post / (alpha_post + beta_post)
print(f"后验均值(估计成功率):{posterior_mean:.0%}")
# 计算95%置信区间
from scipy import stats
ci_lower = stats.beta.ppf(0.025, alpha_post, beta_post)
ci_upper = stats.beta.ppf(0.975, alpha_post, beta_post)
print(f"95%置信区间:({ci_lower:.0%}, {ci_upper:.0%})")


更多推荐



所有评论(0)