逻辑回归(LR)

一、推导过程

假设要解决的问题是一个二分类问题,目标值为 { 0 , 1 } \{0, 1\} {0,1},以线性回归为基础,将模型输出映射到 [ 0 , 1 ] [0, 1] [0,1] 之间。我们选择这样一个函数:
g ( z ) = 1 1 + e − z h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x g(z) = \frac{1}{1 + e^{-z}} \\ h_\theta(x) = g(\theta^T x) = \frac{1}{1+e^{-\theta^Tx}} g(z)=1+ez1hθ(x)=g(θTx)=1+eθTx1
其中 g ( z ) g(z) g(z)被称为 sigmoid 函数。为什么要选择 sigmoid 函数其实是可以通过指数分布族加上广义线性模型进行推导分析的。通过 sigmoid 函数我们可以计算单个样本属于正类还是负类的概率:
p ( y = 1 ∣ x ; θ ) = h θ ( x ) p ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) p(y=1|x;\theta) = h_\theta(x) \\ p(y=0|x;\theta) = 1 - h_\theta(x) p(y=1∣x;θ)=hθ(x)p(y=0∣x;θ)=1hθ(x)
我们将上面两个式子合并成一个:
p ( y = x ∣ ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) ( 1 − y ) p(y=x|;\theta) = (h_\theta(x))^y(1-h_\theta(x))^{(1-y)} p(y=x;θ)=(hθ(x))y(1hθ(x))(1y)
有了上面这个式子,我们就能很容易的得到函数 h h h 在整个数据集上的似然函数
l ( θ ) = P ( Y ∣ X ; θ ) = ∏ i p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i ( h θ ( x ( i ) ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) ( 1 − y ( i ) ) \begin{aligned} l(\theta) =& P(Y|X;\theta) \\ =& \prod_i p(y^{(i)} | x^{(i)} ; \theta) \\ =& \prod_i (h_\theta(x^{(i)}))^{y^{(i)}} (1 - h_\theta(x^{(i)})) ^ {(1-y^{(i)})} \end{aligned} l(θ)===P(YX;θ)ip(y(i)x(i);θ)i(hθ(x(i)))y(i)(1hθ(x(i)))(1y(i))
转为对数似然函数
L ( θ ) = l o g l ( θ ) = ∑ i = 1 m [ y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( l − h θ ( x ( i ) ) ) ] \begin{aligned} L(\theta) =& logl(\theta) \\ =& \sum_{i=1}^m[y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(l-h_\theta(x^{(i)}))] \end{aligned} L(θ)==logl(θ)i=1m[y(i)loghθ(x(i))+(1y(i))log(lhθ(x(i)))]
假设我们用随机梯度下降法更新参数,每次只用一个样例,则上面的对数似然函数退化成:
L ( θ ) = y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( l − h θ ( x ( i ) ) ) L(\theta) = y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(l-h_\theta(x^{(i)})) L(θ)=y(i)loghθ(x(i))+(1y(i))log(lhθ(x(i)))
更新参数的公式为:
θ j : = θ j + α ⋅ ∂ ∂ θ j L ( θ ) \theta_j := \theta_j + \alpha \cdot \frac{\partial}{\partial \theta_j} L(\theta) θj:=θj+αθjL(θ)
这里的 α \alpha α 就是学习率。其次注意式子里的 “+”,因为我们要极大化对数似然函数,所以我们需要沿着梯度方向更新参数。接下来我们要做的就是求出 L ( θ ) L(\theta) L(θ) 对各个参数的偏导。
(1)首先我们知道 sigmoid 函数的求导结果为:
g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) {g}'(z)=g(z)(1 - g(z)) g(z)=g(z)(1g(z))
(2)我们可以推导出 L ( θ ) L(\theta) L(θ) 对各个参数的偏导为:
∂ ∂ θ j L ( θ ) = x j ( y − h θ ( x ) ) \frac{\partial}{\partial \theta_j} L(\theta) = x_j(y - h_\theta(x)) θjL(θ)=xj(yhθ(x))

(3)所以,参数更新公式为:
θ j : = θ j + α ( y ( i ) − h θ j ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \alpha (y^{(i)} - h_{\theta_j}(x^{(i)})) x^{(i)}_j θj:=θj+α(y(i)hθj(x(i)))xj(i)

如果我们用梯度下降法,每次更新参数用所有样例,则参数更新公式为:
θ j : = θ j + ∑ i = 1 m α ( y ( i ) − h θ j ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \sum_{i=1}^m \alpha (y^{(i)} - h_{\theta_j}(x^{(i)})) x^{(i)}_j θj:=θj+i=1mα(y(i)hθj(x(i)))xj(i)

二、参考

  • 斯坦福机器学习课程 —— 吴恩达
  • 斯坦福ML公开课笔记 —— 张雨石
### 逻辑回归 LR 基线模型的使用与实现 #### ### 1. 逻辑回归作为基线模型的意义 逻辑回归(Logistic Regression, LR)作为一种经典的监督学习算法,广泛应用于二分类或多分类任务中。它的核心优势在于输出的概率形式以及较强的可解释性[^1]。因此,在许多实际应用中,逻辑回归通常被选作基线模型,用于初步探索数据特性、验证特征工程的有效性以及设定后续复杂模型的性能下限。 - **优点**: - 输出具有概率意义,不仅给出类别标签还能反映置信度。 - 参数易于理解和调整,适合业务场景下的决策支持。 - 运行效率高,尤其适用于中小型数据集。 - **局限性**: - 属于线性分类器,难以捕捉复杂的非线性关系。 - 需要高质量的手工特征设计才能发挥最佳效果[^2]。 --- #### ### 2. 实现逻辑回归基线模型的关键步骤 以下是基于 Python 的 Scikit-Learn 工具包实现逻辑回归基线模型的具体过程: ```python # 导入必要的库 import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, roc_auc_score # 数据准备 # 假设已有一个包含特征和目标变量的数据框 df X = df.drop(columns=['target']).values # 自变量矩阵 y = df['target'].values # 因变量向量 # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42) # 特征标准化处理 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 初始化并训练逻辑回归模型 lr_clf = LogisticRegression(random_state=42, max_iter=1000) lr_clf.fit(X_train_scaled, y_train) # 模型评估 y_pred_proba = lr_clf.predict_proba(X_test_scaled)[:, 1] # 获取正类概率 y_pred_label = lr_clf.predict(X_test_scaled) # 获取预测标签 accuracy = accuracy_score(y_test, y_pred_label) # 准确率 roc_auc = roc_auc_score(y_test, y_pred_proba) # AUC值 print(f'Accuracy on Test Set: {accuracy:.4f}') print(f'ROC-AUC Score on Test Set: {roc_auc:.4f}') # 查看模型参数 print('Coefficients:', lr_clf.coef_[0]) print('Intercept:', lr_clf.intercept_) ``` 上述代码展示了完整的流程,包括但不限于数据分割、特征缩放、模型训练及评价指标计算等环节[^1]。 --- #### ### 3. 结果解读与优化建议 - **模型参数解析** - `coef_`: 表示各特征对最终结果的影响权重。正值表示该特征增加会提高正类的可能性;负值反之。 - `intercept_`: 截距项,体现整体趋势偏离零点的程度。 - **性能调优方向** - 如果发现某些特征的重要性较低,考虑移除冗余特征以简化模型结构。 - 当面对高度不平衡的数据分布时,引入惩罚因子(如 L1/L2 正则化),或者通过采样技术平衡样本比例[^2]。 - 若单纯依靠逻辑回归无法满足需求,可以尝试集成方法(例如 GBDT+LR 组合架构),进一步挖掘隐藏规律。 --- #### ### 4. 安全环境下的逻辑回归部署实例 随着隐私保护意识增强,在分布式或联邦学习框架内运行逻辑回归成为研究热点之一。下面是一段关于 SecretFlow 平台中直接暴露模型接口的例子[^3]: ```python class DirectRevealModel: def __init__(self, model): self._model = model def predict(self, data): return self._model.predict(data).reveal() def score(self, x, y): predictions = self.predict(x) correct_count = sum(np.equal(predictions, y.reveal())) total_count = len(y) return correct_count / total_count ``` 此片段定义了一个新的类 `DirectRevealModel` ,允许开发者在保障信息安全的前提下完成推理和服务质量监控操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值