共计 2014 个字符,预计需要花费 6 分钟才能阅读完成。
逻辑回归在手写数字识别中的应用与实践
手写数字识别是机器学习入门的经典问题,逻辑回归虽然简单,但在特定场景下仍有其优势。本文将系统性地介绍如何使用 sklearn 的逻辑回归实现 MNIST 分类,并分享调优过程中的经验。

背景与挑战
- 传统逻辑回归的局限性
- MNIST 数据集每张图片为 28×28 像素,展开后就是 784 维特征向量
- 高维特征导致计算复杂度增加,且存在大量冗余信息
-
数字间存在非线性可分关系,纯线性模型难以完美分离
-
与深度方法的对比
- CNN 能自动提取局部特征,适合图像数据
- 逻辑回归参数少、训练快,在小数据量时表现稳定
- 作为基线模型,逻辑回归的 acc 往往能达到 90% 左右
技术实现流程
数据预处理
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
# 加载 MNIST 数据
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练测试集
X_train, X_test = X_scaled[:60000], X_scaled[60000:]
y_train, y_test = y[:60000], y[60000:]
特征降维
- 原始 784 维特征可以直接输入,但计算量大
- 使用 PCA 保留 95% 方差,可将维度降至约 150 维
from sklearn.decomposition import PCA
pca = PCA(0.95)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
模型训练
关键参数说明:
– multi_class='multinomial':启用 softmax 回归
– solver='saga':支持多分类和 L1 正则
– max_iter=1000:确保充分收敛
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(
multi_class='multinomial',
solver='saga',
penalty='l2',
max_iter=1000,
random_state=42
)
model.fit(X_train_pca, y_train)
性能优化策略
超参数调优
使用网格搜索寻找最优正则化强度 C:
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100]}
grid = GridSearchCV(model, param_grid, cv=3)
grid.fit(X_train_pca[:10000], y_train[:10000]) # 子集加速搜索
print(f"Best C: {grid.best_params_}")
正则化对比
- L1 正则化(lasso)会产生稀疏权重
- L2 正则化(ridge)使权重均匀衰减
- 实际测试中 L2 通常表现更好
学习曲线分析
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
train_sizes, train_scores, test_scores = learning_curve(model, X_train_pca, y_train, cv=3)
plt.plot(train_sizes, train_scores.mean(1), label='train')
plt.plot(train_sizes, test_scores.mean(1), label='test')
plt.legend()
常见问题解决方法
- 多分类设置
- 必须显式设置
multi_class='multinomial' -
否则 sklearn 默认使用 OvR 策略
-
类别不平衡
- 设置
class_weight='balanced'自动调整 -
或手动指定各类别权重
-
大数据量优化
- 样本数 >10 万时建议使用
solver='saga' - 可配合
n_jobs=-1启用多核并行
延伸思考与改进方向
- 特征工程优化
- 尝试 HOG 特征替代原始像素
-
加入数字的几何特征(笔画数、对称性等)
-
模型融合
- 将逻辑回归作为基模型集成
-
与简单 CNN 进行 stacking
-
扩展挑战
- 在 CIFAR-10 上测试效果
- 尝试处理彩色 MNIST 变种
总结
通过本文实践可以看到,经过适当优化的逻辑回归在 MNIST 上能达到约 92% 的准确率。虽然不及深度网络,但其训练速度快、可解释性强的特点,使其成为验证特征有效性的理想基线模型。建议初学者先掌握这类基础方法,再逐步过渡到更复杂的模型。
正文完
发表至: 未分类
近两天内
