行业资讯
📅 2026/7/11 20:23:27
逻辑回归为什么叫回归,却用来做分类
学完线性回归后很多人第一次看到逻辑回归都会困惑它既然叫回归为什么常被用来判断是或否会或不会这类分类问题关键在于它并不直接输出类别而是先输出一个概率。例如这条短信是垃圾短信的概率为 0.86然后我们再根据阈值把概率变成最终类别。从线性分数开始逻辑回归和线性回归一样先把输入特征做加权求和z wx b这个z是一个线性分数可以是任意实数例如 -4.2、0.7 或 12。但分类概率必须落在 0 到 1 之间所以它还会经过一个 Sigmoid 函数σ ( z ) 1 1 e − z \sigma(z) \frac{1}{1 e^{-z}}σ(z)1e−z1​Sigmoid 会把很小的分数压到接近 0把很大的分数压到接近 1。于是输出p pp就可以理解为样本属于正类的概率。输入 z输出 σ(z)含义很大5≈ 0.993正类概率极高0 0.5各 50%踩在决策边界上很小-5≈ 0.007正类概率极低线性回归的输出范围是( − ∞ , ∞ ) (-\infty, \infty)(−∞,∞)而分类任务只需要 0 或 1。Sigmoid 就是中间那个翻译官把任意实数压缩到 (0, 1) 区间。模型做的事可以拆成三步先线性加权z w 1 x 1 w 2 x 2 ⋯ b z w_1x_1 w_2x_2 \dots bzw1​x1​w2​x2​⋯b再套 Sigmoidy ^ σ ( z ) \hat{y} \sigma(z)y^​σ(z)输出一个 [0, 1] 之间的概率最后做决策超过阈值判正类否则判负类。概率如何变成类别最常见的阈值是 0.5p 0.5 - 正类1 p 0.5 - 负类0例如垃圾短信概率 0.86在 0.5 阈值下判为垃圾短信用户流失概率 0.22判为不流失。但阈值不是自然规律。信用风控中漏掉高风险用户的代价很大可以把阈值调低让模型更积极地提示风险医学初筛中不希望漏检也常优先提高召回率。反过来误报很昂贵时可以提高阈值。交叉熵专为概率设计的损失函数既然输出变成了概率就不能再用 MSE平方误差来度量。线性回归最小化的是均方误差逻辑回归最小化的是交叉熵L − 1 n ∑ i 1 n [ y i log ⁡ y ^ i ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \mathcal{L} -\frac{1}{n}\sum_{i1}^{n} \left[ y_i \log \hat{y}_i (1-y_i) \log(1-\hat{y}_i) \right]L−n1​i1∑n​[yi​logy^​i​(1−yi​)log(1−y^​i​)]它的特点是越想当然地判错惩罚越猛。预测概率 0.8、真实标签是 1扣 0.22 分预测概率 0.2、真实标签是 1扣 1.61 分预测概率 0.0001、真实标签是 1扣 9.21 分。MSE 在概率上梯度太小模型学不动所以分类任务用交叉熵。它和线性回归到底有什么不同对比项线性回归逻辑回归任务预测连续数值预测类别概率输出范围任意实数0 到 1损失函数MSE交叉熵常见场景房价、销量、温度流失、欺诈、垃圾短信常见评估MAE、RMSE、R²精确率、召回率、F1、AUC两者都包含线性组合这一部分但最后的目标、损失函数和评估方式不同。逻辑回归的回归说的是它学习一个连续的分数和概率最终用途是分类。用 scikit-learn 训练一个二分类模型下面以是否通过考试为例输入是复习小时数标签是是否通过importnumpyasnpfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,confusion_matrix# 每个样本只有一个特征复习小时数Xnp.array([[1],[2],[3],[4],[5],[6],[7],[8]])ynp.array([0,0,0,0,1,1,1,1])modelLogisticRegression()model.fit(X,y)hoursnp.array([[4.5]])probabilitymodel.predict_proba(hours)[0,1]labelmodel.predict(hours)[0]print(f通过概率{probability:.2%})print(f预测类别{label})predict_proba()很重要。它返回每个类别的概率二分类时[0, 1]中索引为 1 的位置就是正类的概率。predict()则使用模型默认阈值直接返回类别标签。想知道模型有多确信应该用predict_proba()不要把predict()当成概率。不要只盯着默认阈值如果需要自定义阈值可以先拿到概率再自行判断threshold0.35custom_labelint(probabilitythreshold)调阈值之前要先想清楚误判正类和漏掉正类哪一种代价更高然后结合验证集上的混淆矩阵、精确率和召回率做选择。只凭感觉改成 0.3 或 0.8通常会让模型更难解释。两个常用选项也值得记一下modelLogisticRegression(penaltyl2,# 正则化l1稀疏解/ l2默认/ NoneC1.0,# 正则化强度的倒数值越小正则化越强solverlbfgs,# 优化器max_iter1000# 迭代次数特征多时需增加)逻辑回归的优点和局限逻辑回归训练快、可解释性强对中小规模表格数据是很好的基线。它还可以通过权重的正负大致判断特征和正类概率的关系方向。但它的分类边界本质上是线性的。数据存在复杂的非线性关系时可能需要构造交互特征或者尝试 KNN、决策树、随机森林等模型。下一个模型 KNN 就完全不学习一条显式公式而是让最近的样本参与投票。常见错误把predict()当成概率predict()返回的是最终类别不是概率。想知道模型有多确信应该使用predict_proba()。忽略类别不平衡如果 99% 的样本都是正常一个永远预测正常的模型准确率也可能是 99%。这时要结合精确率、召回率、F1、类别权重和采样策略而不能只看准确率。用测试集反复调阈值测试集是最后一次客观检查的机会。阈值选择应在训练集内部的验证集或交叉验证中完成否则测试分数会被人为调高。课后练习把示例中的hours改成[[3.5]]、[[5.5]]和[[7.5]]记录每个样本的通过概率。然后分别用 0.5 和 0.7 作为阈值观察最终类别如何变化。小结逻辑回归是经典的分类模型名字里的回归指的是它学一个连续分数和概率它先计算线性分数再用 Sigmoid 压缩到 [0, 1]作为正类概率损失函数用交叉熵而不是 MSE因为 MSE 在概率上梯度太小predict_proba()返回概率predict()返回类别阈值选择应由业务代价与分类指标共同决定。下一课学习 KNN 分类模型不再先学一条公式而是让距离最近的邻居来投票。在线阅读点击这里阅读博客原文原文地址https://bestsdz.xyz/posts/logistic-regression-for-classification/