跳到主要内容

Logistic 回归(二元、有序与多分类)

一、直观理解:把“是/否”变成可解释的概率曲线​

Logistic 回归不是把类别硬切成 0/1,而是先估计一个线性得分,再通过 Sigmoid(或 Softmax)压到 00–11 的概率区间。

想象体检场景:医生根据血压、血糖、年龄判断“是否高风险”。得分越高,高风险概率越大,但很少有人会说“超过某阈值就 100% 确定”。Logistic 回归给出的是连续变化的概率,系数还能回答:某个指标升高一个单位,优势比如何变化。

  • 二元 Logistic:两类(违约/不违约);
  • 多项(无序)Logistic:三类及以上且无天然顺序(红/黄/蓝产品偏好);
  • 有序 Logistic:等级有序(差/中/好、I–IV 期)。

它属于广义线性模型:链接函数是 logit,随机部分常假设二项或多项分布。

二、适用场景与优缺点​

类型说明
适用场景需要类别概率与系数解释;特征以数值/哑变量为主;样本量中等且希望基线清晰;要报告优势比(odds ratio);有序等级分类。
核心优点概率输出自然;系数可解释;训练与推断成熟;可加 L2/L1 正则;易做统计检验与置信区间;计算稳定,适合作为强基线。
局限与缺点默认线性可分假设(特征空间中决策边界是线性的);对多重共线性敏感;极端分离时系数会发散;类别极不平衡时需调权或阈值;非线性交互需手工构造特征。

使用前检查:

  1. 标签是否为类别(有序/无序要分清);
  2. 特征是否已编码、缺失与异常是否处理;
  3. 是否存在完全分离或准完全分离;
  4. 训练/测试是否按实体划分;
  5. 评价指标是否匹配业务代价(不只看准确率)。

三、核心原理​

1. 二元 Logistic​

设特征为 x∈Rpx\in\mathbb{R}^{p},标签 y∈{0,1}y\in\{0,1\}。线性预测子

η=xTβ=β0+β1x1+⋯+βpxp\eta=x^\mathsf{T}\beta=\beta_0+\beta_1 x_1+\cdots+\beta_p x_p

概率模型为

π(x)=P(y=1∣x)=11+e−η=σ(η)\pi(x)=P(y=1\mid x)=\frac{1}{1+e^{-\eta}}=\sigma(\eta)

等价的 logit 形式:

log⁡π(x)1−π(x)=xTβ\log\frac{\pi(x)}{1-\pi(x)}=x^\mathsf{T}\beta

π1−π\dfrac{\pi}{1-\pi} 称为优势(odds)。βj\beta_j 表示 xjx_j 增加 1 时,对数优势增加 βj\beta_j,优势比变为 eβje^{\beta_j}。

参数通常用极大似然估计,最小化负对数似然(交叉熵):

ℓ(β)=−∑i=1n[yilog⁡πi+(1−yi)log⁡(1−πi)]+λ2∥β∥22\ell(\beta)=-\sum_{i=1}^{n}\Big[y_i\log\pi_i+(1-y_i)\log(1-\pi_i)\Big]+\frac{\lambda}{2}\|\beta\|_2^2

2. 多分类(Softmax / 多项 Logistic)​

对 KK 类,选一类为参照,或直接用 Softmax:

P(y=k∣x)=exTβk∑j=1KexTβjP(y=k\mid x)=\frac{e^{x^\mathsf{T}\beta_k}}{\sum_{j=1}^{K}e^{x^\mathsf{T}\beta_j}}

3. 有序 Logistic(比例优势模型)​

等级 1<⋯<K1<\cdots<K,潜变量 y∗=xTβ+εy^*=x^\mathsf{T}\beta+\varepsilon,阈值 θ1<⋯<θK−1\theta_1<\cdots<\theta_{K-1} 将潜变量切成有序类别。比例优势假设要求:各累积 logit 共用同一套斜率 β\beta,只阈值不同。

四、关键决策​

决策点建议
标准化正则化或比较系数大小时建议标准化;解释原始单位时可不标准化,但需统一量纲叙述
正则 λ\lambda用交叉验证选;特征多、样本少时加强正则
类别权重少数类重要时用 Cost 或先验权重,或事后调阈值
阈值不必固定 0.5;按 F1、Youden 指数或代价矩阵选
有序 vs 无序有真实顺序且比例优势近似成立 → 有序;否则多项
共线性VIF 检查;必要时合并变量或岭型惩罚
验证分层 K 折;报告 AUC、各类召回、校准曲线

五、MATLAB 示例​

% 二元分类:三特征预测是否通过(1/0)
X = [
78 3.2 1;
65 2.1 0;
90 3.8 1;
55 1.5 0;
82 2.9 1;
70 2.4 0;
88 3.5 1;
60 1.8 0
];
y = [1; 0; 1; 0; 1; 0; 1; 0];

% 标准化(配合正则时更稳)
[Xz, mu, sigma] = zscore(X);

% 线性 Logistic(fitclinear 适合二分类)
Mdl = fitclinear(Xz, y, ...
"Learner", "logistic", ...
"Regularization", "ridge", ...
"Lambda", 1e-3, ...
"Solver", "lbfgs");

% 预测标签与分数(分数可经 sigmoid 看成 logit 相关量)
[label, score] = predict(Mdl, Xz);
prob = score(:, 2); % 正类得分列,视版本与编码而定

disp("预测标签:"); disp(label);
disp("正类相关分数:"); disp(prob);

% 若有 Statistics and Machine Learning Toolbox 的 fitglm:
% T = array2table([X y], "VariableNames", ["x1","x2","x3","y"]);
% glm = fitglm(T, "y ~ x1 + x2 + x3", "Distribution", "binomial");
% disp(glm.Coefficients);

% 交叉验证选 Lambda
lambda = logspace(-4, 1, 20);
cv = fitclinear(Xz, y, "Learner", "logistic", ...
"Regularization", "ridge", "Lambda", lambda, ...
"KFold", 5);
[~, idx] = min(kfoldLoss(cv));
bestLambda = lambda(idx);
fprintf("CV 最优 Lambda = %.4g\n", bestLambda);

% 混淆矩阵
cm = confusionmat(y, label);
disp("混淆矩阵:"); disp(cm);

多分类可用 fitcecoc 包装一对多 Logistic,或使用 mnrfit(多项)。有序模型在 MATLAB 中常用 mnrfit 配合有序设定,或在外部用专门有序回归包;赛题中若工具有限,可把有序等级当作整数后谨慎使用有序假设,并做比例优势诊断。

六、如何解释结果​

  1. 系数符号与优势比:eβ^j>1e^{\hat\beta_j}>1 表示该特征增大时正类优势上升;
  2. 概率而非硬标签:对临界样本报告 P(y=1∣x)P(y=1\mid x);
  3. 截距:全部特征为 0(或均值,若已中心化)时的基线对数优势;
  4. 多分类:每个非参照类一组系数,解释“相对参照类”的变化;
  5. 有序模型:同一 β\beta 解释“更高等级”的累积优势;
  6. 完整报告:样本量、正负类比例、预处理、正则、阈值、AUC/ F1、主要系数与业务含义。

七、常见误区​

1. 把 Logistic 当成普通线性回归直接拟合 0/1​

最小二乘拟合二值响应会得到越界概率,且方差结构错误。

2. 把优势比说成概率比​

eβe^{\beta} 是优势比,不是概率增加的百分比。

3. 默认阈值 0.5​

类别不平衡或代价不对称时,0.5 往往不是最优工作点。

4. 忽略完全分离​

某特征完美分开两类时,极大似然系数趋向无穷,需要正则或 Firth 惩罚。

5. 有序数据强行用无序多项,或无序数据强行有序​

顺序信息用错会扭曲概率结构。

八、小结​

Logistic 回归用线性得分通过 logit 链接输出类别概率,系数可直接解释为对数优势的变化。

它是分类问题中最重要的可解释基线:二元、多分类与有序情形都有对应形式。使用时抓住三点——链接与似然、阈值与代价、系数的业务翻译,并在非线性很强时用树模型或核方法对照。