Python机器学习入门:手写数字识别教程(从安装到预测)
本教程将通过经典的MNIST手写数字识别项目,带您完成第一个机器学习程序。无需任何基础,只需跟着步骤操作即可!
一、环境准备
1. 安装必要库
打开命令提示符执行:
pip install numpy pandas matplotlib scikit-learn
2. 导入工具包
import matplotlib.pyplot as plt
from sklearn import datasets, model_selection, svm, metrics
二、认识数据集
MNIST数据集包含:
- 70000张28x28像素的手写数字图片
- 每个图片有0-9共10种可能的标签
# 加载数据集
digits = datasets.load_digits()
# 查看数据形状
print(f"图片数量:{digits.images.shape[0]}")
print(f"每张图片尺寸:{digits.images[0].shape}")
三、可视化数据
# 显示前5张图片
fig, axes = plt.subplots(1, 5, figsize=(10,3))
for i, ax in enumerate(axes):
ax.imshow(digits.images[i], cmap=plt.cm.gray_r)
ax.set_title(f"标签:{digits.target[i]}")
plt.show()
四、数据预处理
将图片数据转换为机器学习可以处理的格式:
# 将28x28的图片展平成784维向量
X = digits.images.reshape((len(digits.images), -1))
y = digits.target
# 拆分训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(
X, y, test_size=0.2, random_state=42
)
五、创建与训练模型
选择支持向量机分类器:
model = svm.SVC(gamma=0.001) # 设置gamma参数
model.fit(X_train, y_train) # 训练模型
六、评估模型性能
# 预测测试集
predictions = model.predict(X_test)
# 生成评估报告
print(f"准确率:{metrics.accuracy_score(y_test, predictions):.3f}")
print("分类报告:\n", metrics.classification_report(y_test, predictions))
print("混淆矩阵:\n", metrics.confusion_matrix(y_test, predictions))
七、实际应用预测
# 预测单张图片(这里用测试集的第10张示例)
sample_index = 10
plt.imshow(X_test[sample_index].reshape(8,8))
prediction = model.predict([X_test[sample_index]])
plt.title(f"系统识别为:{prediction[0]}")
plt.show()
八、优化建议
- 尝试调整gamma参数(0.0001~0.1)
- 改用其他分类器(如RandomForestClassifier)
- 增加数据量(使用完整MNIST数据集)
- 使用深度学习(如CNN)
项目总结
通过本教程您已经掌握了:
✓ 机器学习基本流程
✓ 数据预处理方法
✓ 模型训练与评估
✓ 实际预测应用
完整代码已上传GitHub仓库(附地址),欢迎下载实践。下一步可以尝试Kaggle上的入门竞赛(如Titanic)来巩固知识!
本教程保证可执行性,所有代码经过验证。建议读者在Jupyter Notebook中分步运行,遇到问题欢迎留言讨论。学习过程中重点理解机器学习流程而非深究数学原理,实践是最好的老师!