Python 实现 MNIST 手写体数字识别 - KNN 和逻辑回归模型
以下是使用 Python 语言实现 MNIST 手写体数字识别的代码示例,包括数据加载、预处理、模型训练、预测和评估,以及可视化样本图像的步骤。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
# 加载数据集
train_data = pd.read_csv('mnist_train.csv')
test_data = pd.read_csv('mnist_test.csv')
# 分离特征和标签
X_train, y_train = train_data.iloc[:, 1:], train_data.iloc[:, 0]
X_test, y_test = test_data.iloc[:, 1:], test_data.iloc[:, 0]
# 数据预处理
X_train = X_train / 255.0
X_test = X_test / 255.0
# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
# KNN 模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
print('KNN 模型在验证集上的准确率为:', accuracy)
# 逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
print('逻辑回归模型在验证集上的准确率为:', accuracy)
# 在测试集上评估模型
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('KNN 模型在测试集上的准确率为:', accuracy)
y_pred = lr.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('逻辑回归模型在测试集上的准确率为:', accuracy)
# 显示样本图像
plt.imshow(np.array(X_train.iloc[0]).reshape(28, 28), cmap='gray')
plt.title('Label: ' + str(y_train.iloc[0]), fontsize=20)
plt.show()
该代码首先加载 MNIST 手写体数字数据集,然后分离特征和标签,并进行数据预处理。接着使用 KNN 和逻辑回归两种模型进行训练和预测,最后在测试集上评估模型的准确率。此外,代码还可视化显示 MNIST 手写体数字数据集中的样本图像。
步骤说明:
- 加载数据集: 使用
pandas库读取 'mnist_train.csv' 和 'mnist_test.csv' 文件,分别代表训练集和测试集。 - 分离特征和标签: 将训练集和测试集的数据分别拆分为特征数据 (X) 和标签数据 (y)。
- 数据预处理: 将特征数据进行归一化处理,将像素值缩放到 0 到 1 之间,以提高模型的训练效率。
- 划分训练集和验证集: 使用
train_test_split函数将训练集进一步划分为训练集和验证集,用于评估模型在训练过程中是否过拟合。 - 模型训练: 使用 KNN 和逻辑回归两种模型对训练集进行训练。
- 模型评估: 在验证集和测试集上评估模型的准确率。
- 可视化样本图像: 使用
matplotlib库显示训练集中第一个样本图像及其对应的标签。
关键代码说明:
KNeighborsClassifier: KNN 算法的实现,通过寻找距离最近的 k 个邻居来进行预测。LogisticRegression: 逻辑回归算法的实现,通过线性模型和 sigmoid 函数来进行预测。accuracy_score: 计算模型预测的准确率。train_test_split: 将数据集随机划分为训练集和验证集。plt.imshow: 显示图像。
运行代码:
- 确保已安装
numpy,pandas,matplotlib,sklearn等库。 - 将 'mnist_train.csv' 和 'mnist_test.csv' 文件放置在代码所在目录下。
- 运行代码。
结果:
代码会输出 KNN 和逻辑回归模型在验证集和测试集上的准确率,以及显示训练集中的第一个样本图像。
进一步优化:
- 可以尝试不同的参数,例如 KNN 模型中的
n_neighbors和逻辑回归模型中的正则化参数。 - 可以使用更复杂的模型,例如神经网络,以提高模型的准确率。
- 可以使用交叉验证来更全面地评估模型的性能。
总结:
本教程介绍了使用 Python 语言实现 MNIST 手写体数字识别,并使用 KNN 和逻辑回归两种模型进行了训练、预测和评估。通过这个例子,可以学习到如何加载和预处理数据集、使用机器学习模型进行训练和评估,以及可视化样本图像。
原文地址: https://www.cveoy.top/t/topic/nEJY 著作权归作者所有。请勿转载和采集!