第二章 机器学习基础理论 - 数学基础

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



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

具体的专栏内容请参考:

人工智能专栏


四、数理统计基础

4.1 参数估计

参数估计是从样本数据推断总体参数的方法,在护理研究中用于估计患病率、治疗效果等。

4.1.1 点估计与区间估计

理论推导

  1. 点估计:用样本统计量估计总体参数
  • 均值估计: μ ^ = 1 n ∑ i = 1 n X i \hat{\mu} = \frac{1}{n}\sum_{i=1}^n X_i μ^=n1i=1nXi

  • 方差估计: σ ^ 2 = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 \hat{\sigma}^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})^2 σ^2=n11i=1n(XiXˉ)2

  1. 区间估计:给出参数的估计范围
  • 均值的置信区间: X ˉ ± t α / 2 S n \bar{X} \pm t_{\alpha/2} \frac{S}{\sqrt{n}} Xˉ±tα/2n S

护理案例

基于样本数据估计青少年抑郁症患病率的点估计和 95% 置信区间。

4.1.2 最大似然估计

最大似然估计(MLE)是一种参数估计方法,寻找使观测数据出现概率最大的参数值。

理论推导

似然函数: L ( θ ∣ x 1 , x 2 , . . . , x n ) = ∏ i = 1 n f ( x i ∣ θ ) L(\theta|x_1,x_2,...,x_n) = \prod_{i=1}^n f(x_i|\theta) L(θx1,x2,...,xn)=i=1nf(xiθ)

对数似然函数: ln ⁡ L ( θ ) = ∑ i = 1 n ln ⁡ f ( x i ∣ θ ) \ln L(\theta) = \sum_{i=1}^n \ln f(x_i|\theta) lnL(θ)=i=1nlnf(xiθ)

求导并令导数为零: d d θ ln ⁡ L ( θ ) = 0 \frac{d}{d\theta}\ln L(\theta) = 0 dθdlnL(θ)=0

护理案例

估计青少年抑郁症患者 HAMD 评分的正态分布参数(均值和方差)。

PyCharm 操作

import numpy as np
from scipy import stats

# 案例1:青少年抑郁症患病率的参数估计
print("案例1:青少年抑郁症患病率的参数估计")

# 调查数据:在500名青少年中发现68人患抑郁症
n_surveyed = 500
n_depressed = 68

# 点估计
p_hat = n_depressed / n_surveyed
print(f"调查人数:{n_surveyed}人")
print(f"患病人数:{n_depressed}人")
print(f"患病率点估计:{p_hat:.0%}")

# 95%置信区间(正态近似)
z_critical = stats.norm.ppf(0.975)  # 1.96
se = np.sqrt(p_hat * (1 - p_hat) / n_surveyed)
ci_lower = p_hat - z_critical * se
ci_upper = p_hat + z_critical * se
print(f"95%置信区间:({ci_lower:.0%}, {ci_upper:.0%})")

# 案例2:HAMD评分的参数估计
print("\n案例2:HAMD评分的参数估计")

# 基于真实研究数据生成样本
np.random.seed(42)
n_patients = 100
true_mu = 18  # 真实均值
true_sigma = 5  # 真实标准差

# 生成HAMD评分数据
hamd_scores = np.random.normal(true_mu, true_sigma, n_patients)
hamd_scores = np.clip(hamd_scores, 5, 40)  # 限制在合理范围

# 点估计
sample_mu = np.mean(hamd_scores)
sample_sigma = np.std(hamd_scores, ddof=1)  # 使用无偏估计

print(f"样本均值:{sample_mu:.1f}")
print(f"样本标准差:{sample_sigma:.1f}")
print(f"真实均值:{true_mu}")
print(f"真实标准差:{true_sigma}")

# 95%置信区间(t分布)
t_critical = stats.t.ppf(0.975, n_patients - 1)
se_mu = sample_sigma / np.sqrt(n_patients)
mu_ci_lower = sample_mu - t_critical * se_mu
mu_ci_upper = sample_mu + t_critical * se_mu

print(f"均值95%置信区间:({mu_ci_lower:.1f}, {mu_ci_upper:.1f})")
print(f"包含真实均值:{'是' if true_mu >= mu_ci_lower and true_mu <= mu_ci_upper else '否'}")

# 案例3:最大似然估计
print("\n案例3:最大似然估计(正态分布参数)")

# 定义对数似然函数
def log_likelihood_normal(parameters, data):
    """正态分布的对数似然函数"""
    mu, sigma = parameters
    n = len(data)
    log_likelihood = -n/2 * np.log(2 * np.pi) - n/2 * np.log(sigma**2) - np.sum((data - mu)**2) / (2 * sigma**2)
    return log_likelihood

# 定义负对数似然函数(用于最小化)
def neg_log_likelihood_normal(parameters, data):
    return -log_likelihood_normal(parameters, data)

# 使用优化算法寻找MLE
from scipy.optimize import minimize

# 初始猜测
initial_guess = [15, 5]  # 初始均值和标准差

# 最小化负对数似然
result = minimize(neg_log_likelihood_normal, initial_guess, args=(hamd_scores,))

# 最大似然估计结果
mle_mu, mle_sigma = result.x

print(f"最大似然估计均值:{mle_mu:.1f}")
print(f"最大似然估计标准差:{mle_sigma:.1f}")
print(f"样本均值:{sample_mu:.1f}")
print(f"样本标准差:{sample_sigma:.1f}")

# 案例4:贝叶斯参数估计
print("\n案例4:贝叶斯参数估计(治疗效果)")

# 定义先验分布(正态分布)
prior_mu = 20  # 先验均值(基于历史经验)
prior_sigma = 3  # 先验标准差

# 观测数据
observed_data = hamd_scores

# 计算后验分布(正态分布的共轭先验)
n_obs = len(observed_data)
posterior_mu = (prior_mu / prior_sigma**2 + np.sum(observed_data) / sample_sigma**2) / (n_obs / sample_sigma**2 + 1 / prior_sigma**2)
posterior_sigma = 1 / np.sqrt(n_obs / sample_sigma**2 + 1 / prior_sigma**2)

print(f"\n先验分布:N({prior_mu}, {prior_sigma}^2)")
print(f"观测数据:均值={sample_mu:.1f}, 标准差={sample_sigma:.1f}")
print(f"后验分布:N({posterior_mu:.1f}, {posterior_sigma:.1f}^2)")

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

Logo

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

更多推荐