1. 问题导入:为什么线性回归无法直接做分类?
前置知识指引:逻辑回归是基于线性回归推导建立的分类模型,建议先完成:
- (理解线性函数 wTx+b 与梯度下降);
- (理解 Odds 几率与对数极大似然估计)。
在上一章中,我们学习了线性回归 (Linear Regression),它能根据房屋面积 x 预测出连续的房价 y=350 万元。
但是,如果我们面对的是一个二分类问题 (Binary Classification)——例如:
- 根据患者的肿瘤大小 x,判断肿瘤是良性 (y=0) 还是 恶性 (y=1);
- 根据邮件文本特征 x,判断邮件是正常邮件 (y=0) 还是 垃圾邮件 (y=1)。
如果我们强行用线性回归拟合 y∈{0,1} 的散点,会产生两大致命缺陷:
输出值超出 [0, 1] 区间
(出现 ŷ = 2.5 或 ŷ = -0.8,无法解释为概率)
对离群异常值极其敏感
(一个极大 X 散点会导致决策边界大幅倾斜扭曲)
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
为了解决这一难题,逻辑回归 (Logistic Regression) 诞生了:它通过在末端引入一个神奇的 Sigmoid 激活函数,将线性预测得分平滑压缩到绝对的 (0,1) 概率区间内部,成为了工业界应用最广泛的二分类基石算法!
2. 学习目标
完成本章学习后,你将能够:
- 推导 Sigmoid 函数 公式,理解从得分 z 到概率 P(y=1∣x) 的映射直觉;
- 明确解释为什么二分类任务不能使用 MSE,而必须使用交叉熵损失 (Log-Loss);
- 推导并理解决策边界 (Decision Boundary) 的几何含义;
- 熟练使用 混淆矩阵 (Confusion Matrix) 计算 TP, FP, TN, FN 4 大核心指标;
- 深入理解 精确率 (Precision)、召回率 (Recall)、F1-Score 的权衡取舍;
- 掌握 Softmax 回归 的原理与多分类交叉熵损失,理解其在神经网络与大模型中的重要地位;
- 独立跑通 威斯康星乳腺癌诊断二分类实验、Iris 鸢尾花 Softmax 三分类实验,掌握 Kaggle 信用卡欺诈检测 案例,并在 泰坦尼克号 与 Scikit-Learn 手写数字识别 (
load_digits) 课后练习中完成代码与数据集实战。
3. 从线性输出到概率映射:Sigmoid 函数
逻辑回归的第一步与线性回归完全相同:首先对输入特征进行线性加权求和,得到线性得分 z:
z=w1x1+w2x2+⋯+wDxD+b=wTx+b
接着,逻辑回归将得分 z 喂入 Sigmoid 激活函数,将其压缩变换为 (0,1) 之间的概率值 y^:
y^=P(y=1∣x)=σ(z)=1+e−z1
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
3.1 线性得分 (Logits) 与对数几率 (Log-Odds)
逻辑回归的名字中虽然带有“回归”,但它本质上是分类模型。其名称来源于 对数几率 (Log-Odds / Logits):
假设样本属于正例的概率为 p=P(y=1∣x),则样本不属于正例的概率为 1−p。两者之比 1−pp 称为几率 (Odds)。
对其取自然对数,即得到对数几率 (Logits):
ln(1−pp)=z=wTx+b
这揭示了逻辑回归的物理本质:逻辑回归就是用线性方程去拟合样本属于正例的对数几率!
3.2 Sigmoid 函数的 3 大数学特性
- 值域严格限制在 (0,1) 之间:
- 当得分 z→+∞ 时,e−z→0⟹σ(z)→1.0;
- 当得分 z→−∞ 时,e−z→+∞⟹σ(z)→0.0;
- 当得分 z=0 时,e0=1⟹σ(0)=0.5(决策界限)。
- 分类决策规则 (Classification Rule):
- 当 y^=σ(z)≥0.5(即得分 z=wTx+b≥0)时,预测为 正例 (y=1);
- 当 y^=σ(z)<0.5(即得分 z=wTx+b<0)时,预测为 负例 (y=0)。
- 求导极简优雅:Sigmoid 函数的导数可以用其自身非常简洁地表示:
dzdσ(z)=σ(z)(1−σ(z))
手算演练:从特征输入到 Sigmoid 预测类别的 3 步推演
已知某个患者的肿瘤特征为 x1=2.0 (肿瘤大小cm), x2=3.0 (细胞密度),模型权重 w1=1.5,w2=1.0,偏置 b=−5.0:
- 第一步(计算线性得分 z):
z=w1x1+w2x2+b=1.5×2.0+1.0×3.0−5.0=3.0+3.0−5.0=+1.0
- 第二步(计算 Sigmoid 概率 y^):
已知 e−1.0≈0.368,代入得:
y^=σ(1.0)=1+e−1.01=1+0.3681=1.3681≈0.731(73.1%)
- 第三步(分类决策判定):
设定默认概率阈值 Threshold=0.5。因为预测概率 y^=0.731≥0.5,所以模型最终将该患者诊断分类为 恶性肿瘤 (y=1)!
4. 损失函数:交叉熵损失与梯度下降推导
4.1 为什么二分类不能继续使用 MSE?
如果强行将 Sigmoid 复合函数带入均方误差 MSE 损失中:
JMSE(w)=N1i=1∑N(σ(wTxi+b)−yi)2
由于 Sigmoid 函数在两侧极值区域导数趋近于 0(梯度消失),导致总损失 J(w) 变成了一个包含无数局部极小值凹坑的非凸函数 (Non-Convex Function)!梯度下降极易卡在半山腰的非全局最优点,无法收敛。
4.2 单样本损失 vs 全样本平均损失 (Log-Loss)
为了保证损失函数是良好的凸函数 (Convex Function),我们采用极大似然估计 (MLE) 导出二元交叉熵损失:
1. 单样本损失 ℓi(w,b):
- 若真实标签 yi=1,单样本损失为 −ln(y^i);
- 若真实标签 yi=0,单样本损失为 −ln(1−y^i);
- 统一表示为:
ℓi(w,b)=−[yiln(y^i)+(1−yi)ln(1−y^i)]
2. 全样本平均损失 J(w,b):
对全量 N 个训练样本的单样本损失求算术平均值:
J(w,b)=N1i=1∑Nℓi(w,b)=−N1i=1∑N[yiln(y^i)+(1−yi)ln(1−y^i)]
假设某个样本的真实标签为正例 y=1:
- 情况 A (模型预测准确):模型预测该样本属于正例的概率 y^=0.95;
LossA=−[1⋅ln(0.95)+0]≈−(−0.051)=0.051
- 情况 B (模型犯严重错误):模型预测该样本属于正例的概率 y^=0.01;
LossB=−[1⋅ln(0.01)+0]≈−(−4.605)=4.605
结论:交叉熵损失会给“极其自信但预测严重犯错”的模型施加巨大的对数惩罚,逼迫参数快速沿着正确方向更新。
4.3 逻辑回归的梯度下降求导公式
将全样本损失 J(w) 对权重向量 w 求偏导数,借助链式法则,可以导出极度优雅的梯度结果:
∂w∂J=N1i=1∑N(y^i−yi)xi=N1XT(y^−y)
- 梯度更新公式:在第 k 次迭代中,按反梯度方向更新权重:
w(k+1)=w(k)−α⋅N1XT(y^−y)
4.4 逻辑回归常用优化器对比 (Optimizers)
在求解逻辑回归最优权重 w 时,通常有多种优化算法可选:
|
| L-BFGS (拟牛顿法) | 利用海森矩阵 (Hessian) 的二阶导数近似,收敛极快 | 中小规模数据集(默认首选) |
| SGD (随机梯度下降) | 每次迭代仅随机抽取一个或一小批 Batch 样本计算梯度 | 超大规模海量数据 / 在线学习 |
| Liblinear | 基于坐标轴下降法 (Coordinate Descent) | 高维稀疏数据(如文本分类 TF-IDF) |
5. 交互演练:逻辑回归概率与决策边界实验室
请在下方交互实验室中,拖动调整权重 w1,w2、偏置 b 以及决策概率阈值 Threshold,实时观察二维特征平面上的决策边界直线 w1x1+w2x2+b=0、散点预测概率、混淆矩阵以及交叉熵 Loss 的动态变化:
二分类分类器实验室
逻辑回归 Sigmoid 概率与决策边界演练
类别 0 (负例) 类别 1 (正例) 决策边界 z=0 交叉熵损失 (Log-Loss):
准确率 (Accuracy):
精确率 (Precision):
召回率 (Recall):
- 决策边界本质:决策边界就是使得预测概率正好等于 y^=0.5 的超平面。由于 σ(0)=0.5,因此决策边界方程就是线性得分归零的超平面:
z=w1x1+w2x2+b=0
- 试一试点击“自动优化参数”:观察决策边界直线如何将蓝色负例散点(Class 0)与紫色正例散点(Class 1)精准切割在两侧,此时 Log-Loss 达到最小值,准确率高达 100%!
6. 决策边界形态与多分类拓展 (Softmax 回归)
6.1 非线性决策边界 (Non-linear Decision Boundary)
如果数据在二维平面上不是线性可分的(例如呈环形分布),我们可以通过引入高次特征(特征多项式),构造出圆形、椭圆或抛物线形状的非线性决策边界:
z=w1x1+w2x2+w3x12+w4x22+b=0(圆形/椭圆决策边界)
6.2 多分类策略一:One-vs-Rest (OvR / 一对多)
逻辑回归原生为二分类设计。面对 K 个类别的多分类任务(如识别 0~9 十种手写数字),最简单直观的解法是 OvR 策略:
- 为每一个类别 k∈{1,2,…,K} 训练一个独立的二分类逻辑回归模型,将类别 k 作为正例,其余所有 K−1 个类别合并作为负例;
- 预测时,将新样本同时喂入 K 个模型,选取预测概率最高的那一个类别作为最终分类结果:
y^=argk∈{1,…,K}maxPk(y=1∣x)
6.3 多分类核心:Softmax 回归 (Multinomial Logistic Regression)
Softmax 回归 是逻辑回归向多分类问题(K≥3)的直接、正统扩展。它也是所有神经网络、深度学习与大语言模型 (LLM) 输出层的通用激活函数。
1. Softmax 函数定义与数学表达
假设输入样本 x 经过 K 组线性权重计算,得到 K 个类别的线性得分 (Logits):zk=wkTx+bk。
Softmax 函数将这 K 个实数得分先取指数指数化(确保非负),再除以所有类别指数值之和进行归一化,输出 K 个类别的严格概率分布 y^=[y^1,y^2,…,y^K]:
y^k=P(y=k∣x)=Softmax(z)k=∑j=1Kezjezk(满足 k=1∑Ky^k=1, 且 y^k∈(0,1))
得分向量 z = [z₁, z₂, ..., z₉]
zₖ = wₖᵀx + bₖ
指数化 eᶻ = [eᶻ¹, eᶻ², ..., eᶻ⁹]
概率分布 ŷ = [ŷ₁, ŷ₂, ..., ŷ₉]
∑ ŷₖ = 1.0
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
2. 数学定理:Softmax 在 K=2 时退化等价于 Sigmoid
当类别数 K=2 时,两类得分分别为 z1,z2。正例概率为:
P(y=1∣x)=ez1+ez2ez1=(ez1+ez2)/ez2ez1/ez2=ez1−z2+1ez1−z2=1+e−(z1−z2)1=σ(z1−z2)
结论:二分类 Sigmoid 函数本质上就是 Softmax 作用于相对得分差 z1−z2 的特例!
3. 多分类交叉熵损失 (Categorical Cross-Entropy)
对于单样本,假设其真实标签独热编码为 y=[y1,y2,…,yK](在正确类别 c 上 yc=1,其余为 0)。其损失为:
LCCE=−k=1∑Kykln(y^k)=−ln(y^c)=−ln(∑j=1Kezjezc)
全样本平均损失为:
J(W)=−N1i=1∑Nk=1∑Kyi,kln(y^i,k)
4. 工业级数值稳定性:Log-Sum-Exp 防上溢技巧 (Max Trick)
当得分 zk 很大(例如 z1=1000)时,计算机计算 e1000 会导致浮点数上溢 (Overflow),输出 NaN。
解决方案:在计算指数前,从每个得分 zk 中减去当前向量的最大值 M=maxj(zj):
Softmax(z)k=∑j=1Kezj−Mezk−M
数学上可以证明减去常数 M 后分子分母同除以 eM,最终概率完全保持相同,但最大指数项变为 e0=1.0,彻底消除了数值上溢隐患!
手算演练:Softmax 3 分类概率分布与交叉熵 Loss 计算
假设某动物图像经过模型线性层计算后,输出 3 个类别的得分 Logits 分别为:
- z1=2.0 (猫 Cat)
- z2=1.0 (狗 Dog)
- z3=0.1 (兔子 Rabbit)
- 计算指数值:
- e2.0≈7.389
- e1.0≈2.718
- e0.1≈1.105
- 指数总和 Sum =7.389+2.718+1.105=11.212
- 计算 Softmax 归一化预测概率 y^:
- y^1=11.2127.389≈0.659 (65.9% 概率为猫)
- y^2=11.2122.718≈0.242 (24.2% 概率为狗)
- y^3=11.2121.105≈0.099 (9.9% 概率为兔子)
- (验证和:0.659+0.242+0.099=1.000)
- 计算交叉熵损失 Loss:
若该图片的真实标签为猫 (y=[1,0,0]),则交叉熵损失为:
Loss=−ln(y^1)=−ln(0.659)≈0.417
7. 分类评估的最小应用
逻辑回归输出的是类别概率,因此实际使用时需要把概率转换为类别,并根据业务目标选择评估指标。这里先保留最小闭环:
- 用混淆矩阵确认 TP、TN、FP、FN 的数量;
- 根据业务代价决定更关注 Precision 还是 Recall;
- 在验证集上选择分类阈值;
- 使用 F1、ROC-AUC 或 PR-AUC 对候选模型进行统一比较。
本章后面的实验会展示这些指标在乳腺癌诊断、欺诈检测和多分类任务中的实际用法。指标的完整定义、公式、类别不平衡处理和阈值策略统一放在:
以及
不要问“哪个指标最好”,而要问“哪一种错误的业务代价更高”。漏报成本高时优先关注 Recall,误报成本高时优先关注 Precision,需要兼顾两者时再考虑 F1。
8. 二分类与多分类必做实验与经典数据集实战
8.1 必做实验一:威斯康星乳腺癌二分类诊断 (Breast Cancer Lab)
1. 业务背景与数据集特征:
在医疗肿瘤诊断场景中,威斯康星乳腺癌数据集 (Breast Cancer Wisconsin Diagnostic) 是衡量二分类模型性能的标准 Benchmark。数据集包含 569 名患者的 30 维细胞核图像连续特征(如 mean radius 平均半径、mean texture 纹理、mean area 面积等),预测目标为肿瘤性质:恶性 (Malignant, y=0) 与 良性 (Benign, y=1)。
2. 核心考量点与求解分析:
- 特征量纲差异:
mean area 范围为 140∼2500,而 smoothness 范围仅为 0.05∼0.15。若不进行 Z-Score 标准化,梯度下降会在大尺度特征方向剧烈震荡;
- 医疗业务痛点:把恶性肿瘤误诊为良性(漏诊 FN)会导致患者延误治疗,代价极其昂贵。因此,模型评估时需重点关注 Recall (召回率)。
请点击下方代码块中的 “运行代码”,体验完整的二分类逻辑回归训练、混淆矩阵输出与全套评估:
二分类必做实验一:威斯康星乳腺癌诊断 (Breast Cancer Lab) import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
confusion_matrix,
classification_report,
roc_auc_score,
precision_recall_curve,
auc
)
# 1. 加载威斯康星乳腺癌二分类数据集 (569 样本, 30 特征)
cancer_data = load_breast_cancer()
X, y = cancer_data.data, cancer_data.target
target_names = cancer_data.target_names # ['malignant' (恶性), 'benign' (良性)]
# 2. 划分训练集与测试集 (80% 训练集, 20% 测试集)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 3. 特征工程:Z-Score 标准化缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 构建并训练逻辑回归模型
model = LogisticRegression(C=1.0, solver='lbfgs', random_state=42)
model.fit(X_train_scaled, y_train)
# 5. 测试集预测与评估
y_pred = model.predict(X_test_scaled)
y_prob = model.predict_proba(X_test_scaled)[:, 1]
cm = confusion_matrix(y_test, y_pred)
tn, fp, fn, tp = cm.ravel()
print("== 二分类必做实验: 威斯康星乳腺癌诊断 (Breast Cancer) ==")
print(f"训练集样本量: {len(X_train)} | 测试集样本量: {len(X_test)}")
print("\n[混淆矩阵 Confusion Matrix]")
print(f" TN(真负例): {tn:2d} | FP(假正例): {fp:2d}")
print(f" FN(假负例): {fn:2d} | TP(真正例): {tp:2d}\n")
print("[分类性能全景报告 Classification Report]")
print(classification_report(y_test, y_pred, target_names=target_names))
roc_auc = roc_auc_score(y_test, y_prob)
precisions, recalls, _ = precision_recall_curve(y_test, y_prob)
pr_auc = auc(recalls, precisions)
print(f"ROC-AUC 得分: {roc_auc:.4f} (接近 1.0 代表优异得分)")
print(f"PR-AUC 得分: {pr_auc:.4f}")
# 左图定位 FP/FN 两类医疗业务错误;右图观察阈值变化下 Precision 与 Recall 的权衡。
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].imshow(cm, cmap="Blues")
axes[0].set_xticks([0, 1], target_names)
axes[0].set_yticks([0, 1], target_names)
axes[0].set_xlabel("预测类别")
axes[0].set_ylabel("真实类别")
axes[0].set_title("混淆矩阵")
for i in range(2):
for j in range(2):
axes[0].text(j, i, str(cm[i, j]), ha="center", va="center", fontsize=12)
axes[1].plot(recalls, precisions, color="#0f766e", label=f"PR-AUC={pr_auc:.3f}")
axes[1].set(xlabel="Recall", ylabel="Precision", title="Precision-Recall 曲线")
axes[1].legend()
plt.tight_layout()
plt.show()
- 高得分原因:由于细胞核图像特征与肿瘤良恶性高度线性可分,经过 Z-Score 标准化后,逻辑回归的 ROC-AUC 得分高达 0.99 以上;
- 混淆矩阵分析:观察控制台日志中的 FN 数量。若要追求 0 漏诊(FN=0),可在业务中将概率判定阈值从
0.5 进一步下调至 0.3。
8.2 必做实验二:Iris 鸢尾花三分类与 Softmax 概率映射 (Iris 3-Class Softmax Lab)
1. 业务背景与数据集特征:
Iris 鸢尾花数据集 是统计学与机器学习历史上最经典的多分类 Benchmark(包含 150 个样本,4 维花瓣/花萼长宽特征,3 个种类:setosa, versicolor, virginica)。
2. 核心考量点与 Softmax 输出:
- 设置
LogisticRegression(solver='lbfgs') 后,当前版本的 scikit-learn 会针对多类别数据自动采用多项逻辑回归(Softmax)策略,为每一个样本输出 3 个类别的严格概率分布向量 [haty1,haty2,haty3](三者概率之和为 1.0)。
请点击下方代码块中的 “运行代码”,体验 Softmax 3 分类模型拟合与概率向量输出:
多分类必做实验二:Iris 鸢尾花三分类 (Iris Softmax Lab) import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
# 1. 加载 3 分类 Iris 鸢尾花数据集 (150 样本, 4 维特征)
iris = load_iris()
X, y = iris.data, iris.target
target_names = iris.target_names # ['setosa', 'versicolor', 'virginica']
# 2. 划分训练集与测试集 (80% 训练集, 20% 测试集)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 3. 特征 Z-Score 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 构建并训练 Softmax 多分类逻辑回归模型
softmax_reg = LogisticRegression(solver='lbfgs', C=1.0, random_state=42)
softmax_reg.fit(X_train_scaled, y_train)
# 5. 预测测试集前 3 个样本的 Softmax 概率分布
probs = softmax_reg.predict_proba(X_test_scaled[:3])
preds = softmax_reg.predict(X_test_scaled[:3])
print("== 多分类必做实验: Iris 鸢尾花 Softmax 3 分类 ==")
print("\n前 3 个测试样本的 Softmax 归一化概率分布向量 (每行之和为 1.0):")
for i, p in enumerate(probs):
print(f" 样本 {i+1}: setosa={p[0]:.4f}, versicolor={p[1]:.4f}, virginica={p[2]:.4f} => 预测类别: {target_names[preds[i]]}")
# 6. 全套多分类混淆矩阵与分类报告
y_pred_all = softmax_reg.predict(X_test_scaled)
print("\n[3x3 多分类混淆矩阵 Confusion Matrix]")
print(confusion_matrix(y_test, y_pred_all))
print("\n[多分类性能报告 Classification Report]")
print(classification_report(y_test, y_pred_all, target_names=target_names))
- Softmax 概率直觉:观察控制台日志中输出的概率分布向量,每一行 3 个概率之和精确等于 1.0,哪个类别的概率最高,模型就决策判定属于该类;
- 多分类混淆矩阵:对于 K=3 场景,混淆矩阵维度为 3×3,对角线上的数值代表各类别预测正确的样本数量。
8.3 实战案例:Kaggle 信用卡欺诈检测 (Kaggle Credit Card Fraud Detection)
在金融风控领域,Kaggle 信用卡欺诈检测数据集 (Credit Card Fraud Detection) 是处理极度不平衡二分类问题的工业级圣经案例。
- 数据集特征:包含欧洲持卡人共 284,807 笔交易记录,其中仅有 492 笔为非法盗刷欺诈交易,正例比例仅为 0.172%(极度不平衡);
- 准确率陷阱 (Accuracy Paradox):若模型盲目将所有交易直接预测为正常 (y=0),准确率高达 99.83%!然而该模型无法捕捉任何一笔真实欺诈,在实际风控中价值为 0;
- 工业解法:
- 损失加权:设置
LogisticRegression(class_weight='balanced') 给稀有欺诈正例赋予极高惩罚权重;
- 评估转向:弃用 Accuracy,全面采用 Recall (查全率)、PR-AUC 曲线以及 F1-Score 衡量风控拦截效果。
- 核心诉求:宁可错杀一百(误触发风控人工审核 FP),不可放过一个(漏诊欺诈 FN 带来巨额赔付损失)!因此必须优先提高 Recall (召回率);
- 阈值调优:将分类概率阈值从默认的
0.5 降低至 0.2 或 0.1,强行把更多高风险交易拉入安全审计池中。
- 仓库小样例下载:。这是保留类别不平衡特征的教学子集,可直接配合脚本运行;它只用于理解流程,不能代表真实风控效果。
- 完整数据集下载:。完整文件约 150 MB,适合完成稳定的 PR-AUC 与阈值实验。
- 完整参考代码:。直接执行
python creditcard_fraud_lab.py 使用小样例;下载完整数据后执行 python creditcard_fraud_lab.py creditcard.csv。脚本包含训练/验证/测试集切分、class_weight='balanced'、验证集阈值选择、PR-AUC 与混淆矩阵评估。
- 字段说明:
V1 ~ V28 是为保护隐私而 PCA 变换后的交易特征;Time 是交易相对时间;Amount 是交易金额;Class 是标签(1 表示欺诈,0 表示正常)。
- 运行方式:先执行
pip install pandas scikit-learn numpy,再将 CSV 与脚本放在同一目录运行。
8.4 课后必做练习一:Kaggle 泰坦尼克号生存预测 (Kaggle Titanic Survival Competition 课后练习)
Kaggle 泰坦尼克号生存预测 (Titanic: Machine Learning from Disaster) 是全球机器学习初学者第一优先必做的基石入门竞赛。
1. 业务背景与救生原则:
在 1912 年泰坦尼克号沉船事故中,救援过程遵循了著名的“妇女与儿童优先”规则以及社会阶层分配机制。我们将乘客的社会阶级(Pclass)、性别(Sex)、年龄(Age)、兄弟姐妹/配偶数(SibSp)及票价(Fare)作为特征,预测乘客是否成功幸存(Survived: 1 幸存, 0 未幸存)。
请下载下方的数据集 CSV 文件与完整 Python 实验脚本,在本地 Python 环境中运行并体验特征预处理、LogisticRegression 模型拟合与特征权重分析:
Sex_Code 权重显著为正 (w>0):性别映射中 female=1,正权重表明女性乘客的对数几率 ln(1−pp) 显著提升,大幅增加了 Sigmoid 预测幸存的概率,验证了“妇女优先”救援规则;
Pclass 权重显著为负 (w<0):舱位等级中 1 等舱数值最小 (1),3 等舱数值最大 (3)。负权重表明舱位等级数值越高(舱位越差),幸存几率越低;
- 数据预处理启示:文本/类别特征(如性别)必须显式编码为数值;连续缺失值(如年龄)必须在传入模型前用中位数或均值进行缺失填充。
课后必做练习资源:数据集与 Python 脚本一键下载
- 仓库小样例下载:(用于快速运行与理解字段,不代表竞赛完整训练集)
- Python 代码脚本下载:
- 完整数据集下载:。下载
train.csv 后执行 python titanic_lab.py train.csv,其余字段处理流程保持不变。
- 字段 Schema 说明:
Survived: 目标预测变量 (1 为幸存,0 为未幸存)
Pclass: 乘客舱位等级 (1:一等舱, 2:二等舱, 3:三等舱)
Sex: 乘客性别 (male / female)
Age: 乘客年龄
SibSp: 旁系亲属数 (堂兄弟/配偶)
Parch: 直系亲属数 (父母/子女)
Fare: 乘客票价
8.5 课后必做练习二:Scikit-Learn 手写数字多分类识别 (Digits Recognition Lab - load_digits)
Scikit-Learn 经典手写数字数据集 (load_digits) 是从 MNIST 简化导出的 8×8 灰度图像手写数字识别 Benchmark(包含 1,797 个样本,64 维像素点特征,10 个类别 y∈{0,1,…,9})。
请下载下方的数据集 CSV 文件与完整 Python 实验脚本,在本地 Python 环境中体验将 64 维图像像素向量输入 Softmax 逻辑回归进行 10 分类拟合:
- 64 维像素表达:每个 8×8 手写数字微小图像被展平为长 64 的一维连续数值向量,像素取值范围为 0∼16;
- Softmax 10 分类:模型构建了 10 组独立的权重向量 w0,w1,…,w9,分别对应数字 0 到数字 9 的对数得分 Logits;
- 高准确率:简单的 Softmax 逻辑回归在展平的 64 维数字数据上即能达到 96% 以上的高准确率,是进入图像分类领域的基石桥梁。
课后必做练习资源:数据集与 Python 脚本一键下载
- 数据集 CSV 下载:
- Python 代码脚本下载:
- 字段 Schema 说明:
pixel_0_0 ~ pixel_7_7: 8×8 图像的 64 维像素灰度值 (0∼16)
target: 手写数字真实类别 (0∼9 10 个数字分类)
9. 常见错误排查 (Troubleshooting)
|
模型权重 w 飙升至极大值,甚至报 overflow in exp | 特征存在完全线性可分 (Separation Paradox),导致没有正则化约束时 w→∞ | 在 LogisticRegression 中设置合适的正则化参数 C(如 C=1.0);或增大特征缩放 |
| 高风险风控模型召回率极低,漏诊大量危险样本 | 使用了默认 0.5 概率阈值,无法适应严重正负样本不平衡数据集 | 手动降低决策概率阈值(如设为 0.2),或设置 class_weight='balanced' |
| 准确率 Accuracy 很高,但模型在实际业务中完全失效 | 样本集中正负比例极度失衡(如正例仅 0.1%),模型盲目预测负例 | 停止使用 Accuracy,改用 Precision/Recall、F1-Score 与 PR-AUC 曲线 |
梯度下降求解器不收敛,报 Maximal number of iterations reached | 未对特征进行 Z-Score 标准化,导致损失平面为陡峭狭长峡谷 | 在传入 LogisticRegression 前,先使用 StandardScaler 对特征进行标准化 |
10. 本节检查清单 (Checklist)
11. 课后互动自测
02. 逻辑回归与二分类评估 课后互动自测
共 3 道精选测试题 · 答题进度已自动保存
单选题
在逻辑回归模型中,如果某样本经线性部分计算得到的得分 z = 0,那么 Sigmoid 函数输出的预测概率 ŷ 是多少?
12. 下一步与相关章节
掌握了线性回归与逻辑回归这两大线性模型基石后:
- 下一章推荐:学习 ,探索空间距离近邻分类与条件独立概率建模!
- 相关前置与扩展阅读:
13. 参考资料