逻辑回归全解析:从基础到实战(Python代码+案例演示)

一、核心原理与模型结构

  1. 从线性回归到概率映射
    逻辑回归通过 ‌Sigmoid函数‌ 将线性预测值映射到 (0,1) 区间,输出概率值:
    σ(z)=11+e−z其中 z=wTx+bσ(z)=1+e−z1​其中 z=wTx+b
    输出 p(y=1∣x)=σ(z)p(y=1∣x)=σ(z) 表示样本属于正类的概率‌。

  2. 对数几率解释
    逻辑回归建立 ‌对数几率与线性预测值‌ 的关系:
    ln⁡(p1−p)=wTx+bln(1−pp​)=wTx+b
    权重变化直接影响概率优势,例如 wjwj​ 增加 1 单位,概率优势扩大 ewjewj​ 倍‌。


二、数学推导与优化方法

  1. 极大似然估计
    目标是最小化 ‌交叉熵损失函数‌:
    J(w)=−1m∑i=1m[yiln⁡σ(zi)+(1−yi)ln⁡(1−σ(zi))]J(w)=−m1​∑i=1m​[yi​lnσ(zi​)+(1−yi​)ln(1−σ(zi​))]
    通过最大化对数似然函数 L(w)L(w) 求解最优参数‌。

  2. 梯度计算与参数更新
    权重梯度公式(矩阵形式):
    ∇wJ=1mXT(σ(z)−Y)∇w​J=m1​XT(σ(z)−Y)
    使用梯度下降法更新参数:
    w:=w−α∇wJ(α 为学习率)w:=w−α∇w​J(α 为学习率) ‌

  3. 正则化

    • L1正则化‌:增加 λ∥w∥1λ∥w∥1​,促进稀疏解。
    • L2正则化‌:增加 λ2∥w∥222λ​∥w∥22​,抑制过拟合‌。

三、多分类扩展:Softmax回归

  1. 模型结构
    对 KK 个类别,使用 ‌Softmax函数‌ 计算概率分布:
    p(y=k∣x)=ewkTx∑j=1KewjTxp(y=k∣x)=∑j=1K​ewjT​xewkT​x​
    输出每个类别的概率,总和为 1‌。

  2. 损失函数
    多分类交叉熵损失:
    J(W)=−1m∑i=1m∑k=1Kyi,kln⁡p(y=k∣xi)J(W)=−m1​∑i=1m​∑k=1K​yi,k​lnp(y=k∣xi​)
    其中 yi,kyi,k​ 为第 ii 个样本在类别 kk 的标签‌。


四、实战案例:鸢尾花分类(Python代码)

1. 数据准备与模型训练
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练多分类逻辑回归模型
model = LogisticRegression(multi_class='multinomial', solver='lbfgs', penalty='l2', C=1.0)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"准确率:{accuracy_score(y_test, y_pred):.2f}")  # 输出:准确率:1.00‌:ml-citation{ref="3,6" data="citationList"}
2. 自定义逻辑回归实现(核心代码)
import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

class LogisticRegression:
    def __init__(self, lr=0.01, epochs=1000):
        self.lr = lr
        self.epochs = epochs
    
    def fit(self, X, y):
        m, n = X.shape
        self.w = np.zeros(n)
        self.b = 0
        
        for _ in range(self.epochs):
            z = np.dot(X, self.w) + self.b
            p = sigmoid(z)
            grad_w = np.dot(X.T, (p - y)) / m
            grad_b = np.mean(p - y)
            self.w -= self.lr * grad_w
            self.b -= self.lr * grad_b
    
    def predict(self, X):
        z = np.dot(X, self.w) + self.b
        return (sigmoid(z) > 0.5).astype(int)‌:ml-citation{ref="4,6" data="citationList"}

五、关键总结

场景方法注意事项
二分类(用户购买预测)Sigmoid函数 + 交叉熵损失特征标准化、处理类别不平衡‌
多分类(鸢尾花分类)Softmax函数 + L2正则化选择 solver='lbfgs' 加速收敛‌
高维稀疏数据L1正则化 + SGD优化稀疏特征需压缩存储‌

六、扩展学习

  • 特征工程‌:类别特征需编码(如One-Hot),数值特征需标准化‌。
  • 模型评估‌:除准确率外,关注混淆矩阵、ROC-AUC曲线‌。
  • 部署优化‌:使用 joblib 保存模型,或转换为C++代码提升推理速度‌。
  • 推荐书籍‌:《统计学习基础》《Python机器学习实战》‌

通过理论推导与代码实践结合,逻辑回归可灵活应用于分类任务,并为理解更复杂模型(如神经网络)奠定基础‌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
OSZAR »