三、概率论基础

请添加图片描述
在这里插入图片描述



前面python的基础内容算是完成了,接下来将要进入机器学习部分了。

具体的专栏内容请参考:

人工智能专栏


3.1 概率分布与随机变量

3.1.1 概率分布的定义与类型

概率分布描述了随机变量取不同值的概率规律,在护理研究中用于建模患者特征和治疗效果。

理论推导

  1. 离散型随机变量:概率质量函数(PMF) P ( X = x ) P(X = x) P(X=x)

  2. 连续型随机变量:概率密度函数(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 常见概率分布及其应用

理论推导

  1. 二项分布: 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(1p)nk

  2. 正态分布: 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π σ1e2σ2(xμ)2

  3. 泊松分布: 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 期望与方差

理论推导

  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

  1. 方差:
  • 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[(XE[X])2]=E[X2](E[X])2
  1. 协方差: 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[(XE[X])(YE[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(AB)=P(B)P(BA)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(BAi)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(AiB)=jP(BAj)P(Aj)P(BAi)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%})")

在这里插入图片描述
在这里插入图片描述

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐