为何说逻辑回归是分类任务的“最佳基石”?
提到“回归”你可能先想到房价预测。但有一个名字里带“回归”、实际却用来做分类的算法在机器学习界地位极高——逻辑回归Logistic Regression。医学诊断、金融风控、垃圾邮件识别……到处都有它的身影。原因很简单简单、高效、能输出概率、可解释性强。本文带你从零开始彻底搞懂逻辑回归并用两个真实案例心脏病预测 手写数字识别亲手跑通代码。1. 名字是个误会从“回归”到“分类”逻辑回归本质上还是从线性回归“变”过来的。线性回归的局限输出范围整个实数轴-∞ 到 ∞分类任务需要的是概率0 到 1解决方案Sigmoid 函数也叫 Logistic 函数公式很简单f(x)11e−xf(x)1e−x1特性输出恒在 (0, 1) 之间输入为 0 时输出恰好 0.5形状像 S 形曲线把线性回归的结果扔进 Sigmoid就得到了一个概率值。逻辑回归的完整公式P(y1∣x)11e−(β0β1x1⋯βnxn)P(y1∣x)1e−(β0β1x1⋯βnxn)1决策规则概率 0.5 → 预测为类别 1概率 ≤ 0.5 → 预测为类别 0注意0.5 这个阈值可以按业务需求调整。比如疾病筛查宁可误报可降低阈值质量检测则可能调高阈值。2. 如何训练模型最大似然估计模型的核心是找到一组参数 $\beta$让训练数据出现的概率最大。单个样本的概率表达P(y∣x;β)y^y⋅(1−y^)1−yP(y∣x;β)y^y⋅(1−y^)1−y若 $y1$值为 $\hat{y}$若 $y0$值为 $1-\hat{y}$所有样本的似然函数L(β)∏i1ny^iyi(1−y^i)1−yiL(β)∏i1ny^iyi(1−y^i)1−yi取对数连乘变连加logL(β)∑i1n[yilogy^i(1−yi)log(1−y^i)]logL(β)∑i1n[yilogy^i(1−yi)log(1−y^i)]损失函数二元交叉熵Loss−1nlogL(β)Loss−n1logL(β)最大化似然 ⇔ 最小化交叉熵损失。重要性质逻辑回归的损失函数是凸函数→ 有唯一的全局最优解不会陷入局部最小值。但注意没有闭式解不像线性回归一步算出必须用梯度下降或牛顿法迭代求解。3. 梯度下降与正则化损失函数的梯度最终简化形式∇Loss−1nXT(p−y)∇Loss−n1XT(p−y)其中 $p$ 是预测概率$y$ 是真实标签。梯度大小 预测与真实之间的误差。误差越大参数更新越快。常用优化求解器solversolver特点lbfgs拟牛顿法默认选项支持 L2 正则化liblinear适合小数据集支持 L1 / L2saga适合大数据支持 L1、L2、ElasticNet注意penalty和solver必须兼容否则报错。正则化防止过拟合在损失函数中加入参数惩罚项让模型参数尽量小。类型效果适用场景L1 正则化部分系数变为 0 → 自动特征选择特征很多想筛选重要特征L2 正则化系数整体缩小但不为 0大多数情况的默认选择ElasticNet结合 L1 和 L2需要同时控制稀疏性和整体收缩关键参数是 CC 越小正则化越强。例如C0.01比C1.0正则化力度大得多。4. 实战一心脏病预测二分类数据集来自 Kaggle包含 14 个临床特征标签为“是否患有心脏病”。4.1 加载数据 划分训练集数据集下载https://pan.baidu.com/s/10F-DZPstvBw7Cmg5AvaUUA?pwd9pjpimport pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.linear_model import LogisticRegression heart_disease pd.read_csv(data/heart_disease.csv) heart_disease heart_disease.dropna() X heart_disease.drop(是否患有心脏病, axis1) y heart_disease[是否患有心脏病] x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state100)4.2 特征工程数值型、类别型、二元型分开处理numerical_features [年龄, 静息血压, 胆固醇, 最大心率, 运动后的 ST 下降, 主血管数量] categorical_features [胸痛类型, 静息心电图结果, 峰值 ST 段的斜率, 地中海贫血] binary_features [性别, 空腹血糖, 运动性心绞痛] preprocessor ColumnTransformer([ (num, StandardScaler(), numerical_features), (cat, OneHotEncoder(dropfirst), categorical_features), (binary, passthrough, binary_features), ]) x_train preprocessor.fit_transform(x_train) x_test preprocessor.transform(x_test)对类别特征使用dropfirst是为了避免多重共线性让矩阵满秩参数可唯一确定。4.3 训练与评估model LogisticRegression() model.fit(x_train, y_train) acc model.score(x_test, y_test) print(f测试集准确率: {acc:.4f})训练后可通过model.coef_查看每个特征的重要性。5. 多分类任务从二分类到多分类逻辑回归天生做二分类但可以扩展到多分类。主要有两种方法。5.1 一对多One-vs-Rest, OvR对每个类别训练一个二分类器本类 vs 其余预测时取概率最高的类别类别数量多时训练慢5.2 Softmax 回归多项逻辑回归只训练一个模型使用 Softmax 函数输出所有类别的概率概率之和为 1分类一致性更好Softmax 公式P(yc∣x)eβcTx∑j1CeβjTxP(yc∣x)∑j1CeβjTxeβcTxscikit-learn 切换方式# 一对多 model LogisticRegression(multi_classovr) # Softmax model LogisticRegression(multi_classmultinomial)对于多分类LogisticRegression 默认自动使用multinomial如果求解器支持。6. 实战二手写数字识别多分类MNIST 手写数字0-9每张图 28×28 像素共 784 个特征。6.1 加载并查看一张图片数据集下载https://pan.baidu.com/s/1xg4UnBRx2h0ysmhmAttn8g?pwd6tzwimport pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from sklearn.linear_model import LogisticRegression digit pd.read_csv(data/train.csv) plt.imshow(digit.iloc[10, 1:].values.reshape(28, 28), cmapgray) plt.show()6.2 归一化 训练X digit.drop(label, axis1) y digit[label] x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state100) scaler MinMaxScaler() x_train scaler.fit_transform(x_train) x_test scaler.transform(x_test) model LogisticRegression(max_iter500) # 增加迭代次数确保收敛 model.fit(x_train, y_train) print(f测试集准确率: {model.score(x_test, y_test):.4f})6.3 预测单张图片plt.imshow(digit.iloc[123, 1:].values.reshape(28, 28), cmapgray) plt.show() print(model.predict(digit.iloc[123, 1:].values.reshape(1, -1)))特征维度高达 784默认max_iter100可能不够需要调大。7. 总结逻辑回归为什么能成为分类任务的“基石”优点解释输出概率可解释性强适合需要置信度的场景线性决策边界简单、不易过拟合损失函数是凸函数有全局最优解训练稳定正则化支持良好L1 / L2 / ElasticNet有效防止过拟合多分类扩展OvR 或 Softmax灵活应对不同规模的问题训练速度快特征重要性可解释系数直接反映特征影响方向与大小但也要知道它的局限只能学习线性决策边界无法直接处理非线性问题可结合特征多项式或核技巧对特征尺度敏感必须做标准化 / 归一化类别严重不平衡时需调整class_weight参数即便如此逻辑回归依然是数据科学入门的第一选择也是许多工业级系统的基线模型。希望这两个完整案例能帮你真正掌握逻辑回归。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2485810.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!