Logistic 回归(二元、有序与多分类)
一、直观理解:把“是/否”变成可解释的概率曲线
Logistic 回归不是把类别硬切成 0/1,而是先估计一个线性得分,再通过 Sigmoid(或 Softmax)压到 – 的概率区间。
想象体检场景:医生根据血压、血糖、年龄判断“是否高风险”。得分越高,高风险概率越大,但很少有人会说“超过某阈值就 100% 确定”。Logistic 回归给出的是连续变化的概率,系数还能回答:某个指标升高一个单位,优势比如何变化。
- 二元 Logistic:两类(违约/不违约);
- 多项(无序)Logistic:三类及以上且无天然顺序(红/黄/蓝产品偏好);
- 有序 Logistic:等级有序(差/中/好、I–IV 期)。
它属于广义线性模型:链接函数是 logit,随机部分常假设二项或多项分布。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 需要类别概率与系数解释;特征以数值/哑变量为主;样本量中等且希望基线清晰;要报告优势比(odds ratio);有序等级分类。 |
| 核心优点 | 概率输出自然;系数可解释;训练与推断成熟;可加 L2/L1 正则;易做统计检验与置信区间;计算稳定,适合作为强基线。 |
| 局限与缺点 | 默认线性可分假设(特征空间中决策边界是线性的);对多重共线性敏感;极端分离时系数会发散;类别极不平衡时需调权或阈值;非线性交互需手工构造特征。 |
使用前检查:
- 标签是否为类别(有序/无序要分清);
- 特征是否已编码、缺失与异常是否处理;
- 是否存在完全分离或准完全分离;
- 训练/测试是否按实体划分;
- 评价指标是否匹配业务代价(不只看准确率)。
三、核心原理
1. 二元 Logistic
设特征为 ,标签 。线性预测子
概率模型为
等价的 logit 形式:
称为优势(odds)。 表示 增加 1 时,对数优势增加 ,优势比变为 。
参数通常用极大似然估计,最小化负对数似然(交叉熵):
2. 多分类(Softmax / 多项 Logistic)
对 类,选一类为参照,或直接用 Softmax:
3. 有序 Logistic(比例优势模型)
等级 ,潜变量 ,阈值 将潜变量切成有序类别。比例优势假设要求:各累积 logit 共用同一套斜率 ,只阈值不同。
四、关键决策
| 决策点 | 建议 |
|---|---|
| 标准化 | 正则化或比较系数大小时建议标准化;解释原始单位时可不标准化,但需统一量纲叙述 |
| 正则 | 用交叉验证选;特征多、样本少时加强正则 |
| 类别权重 | 少数类重要时用 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 配合有序设定,或在外部用专门有序回归包;赛题中若工具有限,可把有序等级当作整数后谨慎使用有序假设,并做比例优势诊断。
六、如何解释结果
- 系数符号与优势比: 表示该特征增大时正类优势上升;
- 概率而非硬标签:对临界样本报告 ;
- 截距:全部特征为 0(或均值,若已中心化)时的基线对数优势;
- 多分类:每个非参照类一组系数,解释“相对参照类”的变化;
- 有序模型:同一 解释“更高等级”的累积优势;
- 完整报告:样本量、正负类比例、预处理、正则、阈值、AUC/ F1、主要系数与业务含义。
七、常见误区
1. 把 Logistic 当成普通线性回归直接拟合 0/1
最小二乘拟合二值响应会得到越界概率,且方差结构错误。
2. 把优势比说成概率比
是优势比,不是概率增加的百分比。
3. 默认阈值 0.5
类别不平衡或代价不对称时,0.5 往往不是最优工作点。
4. 忽略完全分离
某特征完美分开两类时,极大似然系数趋向无穷,需要正则或 Firth 惩罚。
5. 有序数据强行用无序多项,或无序数据强行有序
顺序信息用错会扭曲概率结构。
八、小结
Logistic 回归用线性得分通过 logit 链接输出类别概率,系数可直接解释为对数优势的变化。
它是分类问题中最重要的可解释基线:二元、多分类与有序情形都有对应形式。使用时抓住三点——链接与似然、阈值与代价、系数的业务翻译,并在非线性很强时用树模型或核方法对照。