如何在Python中基于对数似然目标函数推导并实现线性回归解析解
基于极大似然估计的线性回归手动实现(无数值优化)
1. 高斯分布假设下的ML估计量推导
假设线性回归模型为:
$y_i = \mathbf{w}^T\mathbf{x}_i + \epsilon_i$
其中噪声项$\epsilon_i$服从独立同分布的高斯分布$\mathcal{N}(0, \sigma^2)$,因此目标变量的条件分布为:
$y_i | \mathbf{x}_i \sim \mathcal{N}(\mathbf{w}^T\mathbf{x}_i, \sigma^2)$
对似然函数取对数后,最大化对数似然等价于最小化残差平方和,最终可推导出权重的极大似然估计量为解析解:
$\hat{\mathbf{w}} = (\mathbf{X}T\mathbf{X}){-1}\mathbf{X}^T\mathbf{y}$
其中$\mathbf{X}$是包含截距项的特征矩阵,$\mathbf{y}$是目标变量向量。
2. Python手动实现代码
以下代码完全手动实现该解析解,不依赖任何机器学习框架,也不使用梯度下降等数值优化方法:
import numpy as np # 构造模拟数据集 np.random.seed(42) n_samples = 100 n_features = 2 # 构建带截距项的特征矩阵(第一列为全1,对应偏置项w0) X = np.hstack([np.ones((n_samples, 1)), np.random.randn(n_samples, n_features)]) true_weights = np.array([3.5, -1.2, 2.1]) # 真实权重:w0, w1, w2 noise = np.random.randn(n_samples) * 0.5 # 高斯噪声,方差0.25 y = X @ true_weights + noise # 生成目标值 # 计算极大似然估计的权重 X_T_X = X.T @ X X_T_y = X.T @ y hat_weights = np.linalg.inv(X_T_X) @ X_T_y # 输出结果对比 print("真实权重:", true_weights) print("ML估计权重:", np.round(hat_weights, 3)) # 单样本预测示例 test_sample = np.array([1, 0.5, -0.3]) # 需包含截距项1 prediction = test_sample @ hat_weights print(f"测试样本{test_sample}的预测值:", np.round(prediction, 3))
说明
- 该实现基于高斯噪声的分布假设,其ML估计量与最小二乘估计量完全一致,但推导逻辑完全基于极大似然框架
- 代码直接使用矩阵运算计算解析解,无需迭代优化,符合无数值优化方法的要求
- 若针对其他分布(如泊松分布)实现,单变量场景下ML估计量为样本均值,但多变量泊松回归无解析解,无法避免数值优化,因此高斯分布是最匹配需求的案例
内容的提问来源于stack exchange,提问作者Xtiaan
相关产品推荐
相关产品推荐

