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


前面python的基础内容算是完成了,接下来将要进入机器学习部分了。
具体的专栏内容请参考:
人工智能专栏
四、数理统计基础
4.1 参数估计
参数估计是从样本数据推断总体参数的方法,在护理研究中用于估计患病率、治疗效果等。
4.1.1 点估计与区间估计
理论推导:
- 点估计:用样本统计量估计总体参数
-
均值估计: μ ^ = 1 n ∑ i = 1 n X i \hat{\mu} = \frac{1}{n}\sum_{i=1}^n X_i μ^=n1∑i=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=n−11∑i=1n(Xi−Xˉ)2
- 区间估计:给出参数的估计范围
- 均值的置信区间: X ˉ ± t α / 2 S n \bar{X} \pm t_{\alpha/2} \frac{S}{\sqrt{n}} Xˉ±tα/2nS
护理案例:
基于样本数据估计青少年抑郁症患病率的点估计和 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)")


更多推荐



所有评论(0)