IRLS 迭代加权最小二乘

参考文献:Burrus C S. Iterative re-weighted least squares[J]. Comm.pure Appl.math, 2009, 44(6):1-9.

### 迭代加权最小二乘法在逻辑回归中的实现与解释 #### 1. 方法概述 迭代加权最小二乘法(Iteratively Reweighted Least Squares, IRLS)是一种用于求解广义线性模型参数估计的方法,在逻辑回归中尤为常见。该方法通过一系列加权最小二乘问题逐步逼近最大似然估计的结果。 #### 2. 数学原理 对于给定的数据集 \((x_i,y_i)\),其中 \(y_i\) 是二元变量,IRLS 的目标是最小化负对数似然函数: \[ L(\beta)=-\sum_{i=1}^{n}\left[y_i\log(p(x_i;\beta))+(1-y_i)\log(1-p(x_i;\beta))\right] \] 这里 \(p(x_i;\beta)=\frac{1}{1+\exp(-z_i)}\) 表示事件发生的概率,\(z_i=\beta_0+x_i^T\beta\) 称为线性预测子[^1]。 为了简化优化过程,可以引入权重矩阵 W 和调整后的响应向量 z: - 权重矩阵 W 对角线上元素为 \(w_i=p(x_i)(1-p(x_i))\) - 调整后的响应向量 z 定义为 \(z=X\hat{\beta}+W^{-1}(Y-\mu)\) 基于此转换,原问题转化为标准形式的加权最小二乘问题: \[ \min_\beta (Z-X\beta)^TW(Z-X\beta) \] 每次迭代更新 β 后重新计算 p、W 和 Z,直到收敛为止。 #### 3. Python 实现代码 下面是一个简单的Python实现例子来展示如何利用scipy库解决这个问题: ```python import numpy as np from scipy.optimize import minimize def sigmoid(z): return 1 / (1 + np.exp(-z)) def log_likelihood(beta, X, Y): scores = X.dot(beta) ll = np.sum(Y * scores - np.log(1 + np.exp(scores))) return -ll def fit_logistic_regression_IRLS(X, y, tol=1e-8, max_iter=100): n_samples, n_features = X.shape beta = np.zeros(n_features) for _ in range(max_iter): mu = sigmoid(np.dot(X,beta)) W = np.diag(mu*(1-mu)) z = np.dot(X,beta)+(np.linalg.inv(W).dot(y-mu)) result = minimize(lambda b: log_likelihood(b,X,z), beta) new_beta = result.x if np.allclose(new_beta, beta, rtol=tol): break beta = new_beta return beta # Example usage: X = ... # Feature matrix y = ... # Target vector beta_hat = fit_logistic_regression_IRLS(X, y) print(f"Fitted coefficients:\n {beta_hat}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值