You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:04:54