以下是使用 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 手写体数字数据集中的样本图像。

步骤说明:

  1. 加载数据集: 使用 pandas 库读取 'mnist_train.csv' 和 'mnist_test.csv' 文件,分别代表训练集和测试集。
  2. 分离特征和标签: 将训练集和测试集的数据分别拆分为特征数据 (X) 和标签数据 (y)。
  3. 数据预处理: 将特征数据进行归一化处理,将像素值缩放到 0 到 1 之间,以提高模型的训练效率。
  4. 划分训练集和验证集: 使用 train_test_split 函数将训练集进一步划分为训练集和验证集,用于评估模型在训练过程中是否过拟合。
  5. 模型训练: 使用 KNN 和逻辑回归两种模型对训练集进行训练。
  6. 模型评估: 在验证集和测试集上评估模型的准确率。
  7. 可视化样本图像: 使用 matplotlib 库显示训练集中第一个样本图像及其对应的标签。

关键代码说明:

  • KNeighborsClassifier: KNN 算法的实现,通过寻找距离最近的 k 个邻居来进行预测。
  • LogisticRegression: 逻辑回归算法的实现,通过线性模型和 sigmoid 函数来进行预测。
  • accuracy_score: 计算模型预测的准确率。
  • train_test_split: 将数据集随机划分为训练集和验证集。
  • plt.imshow: 显示图像。

运行代码:

  1. 确保已安装 numpy, pandas, matplotlib, sklearn 等库。
  2. 将 'mnist_train.csv' 和 'mnist_test.csv' 文件放置在代码所在目录下。
  3. 运行代码。

结果:

代码会输出 KNN 和逻辑回归模型在验证集和测试集上的准确率,以及显示训练集中的第一个样本图像。

进一步优化:

  • 可以尝试不同的参数,例如 KNN 模型中的 n_neighbors 和逻辑回归模型中的正则化参数。
  • 可以使用更复杂的模型,例如神经网络,以提高模型的准确率。
  • 可以使用交叉验证来更全面地评估模型的性能。

总结:

本教程介绍了使用 Python 语言实现 MNIST 手写体数字识别,并使用 KNN 和逻辑回归两种模型进行了训练、预测和评估。通过这个例子,可以学习到如何加载和预处理数据集、使用机器学习模型进行训练和评估,以及可视化样本图像。

Python 实现 MNIST 手写体数字识别 - KNN 和逻辑回归模型

原文地址: https://www.cveoy.top/t/topic/nEJY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录