1、MNIST数据集
MNIST 是一个手写数字(0
到9
)的大型数据集,广泛用于训练和测试在图像处理领域的机器学习模型。Scikit-learn 提供了一些工具来加载和使用这些数据。Scikit-learn 的 datasets 模块提供了加载流行数据集的功能,但需要注意的是,Scikit-learn 自带的是 MNIST 数据集的小版本。对于完整的 MNIST 数据集,我们通常会使用其他库(如 TensorFlow 或 PyTorch)来加载。
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
# 显示第一张图片及其标签
plt.imshow(digits.images[0], cmap='gray')
plt.title('Label: {}'.format(digits.target[0]))
plt.show()
# 数据集大小
print("数据集图片数: ", len(digits.images))
print("每张图片的维度: ", digits.images[0].shape)
2、训练SVM模型
Python中训练一个支持向量机(SVM)模型通常涉及使用scikit-learn库,Python中最流行的机器学习库之一。训练模型并进行预测后,使用适当的评估指标来评估模型的性能。在分类任务中,常用的评估指标包括准确率(accuracy)、召回率(recall)、精确率(precision)和F1分数等。使用scikit-learn训练SVM模型是一个直接且高效的过程。关键步骤包括数据准备、选择合适的SVM模型和核函数、模型训练以及性能评估。为了获得最佳性能,可能需要尝试不同的模型参数和核函数。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建SVM分类器实例
clf = SVC(kernel='linear', C=1.0, random_state=42)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(accuracy)
3、实现数字识别器
SVM 数字识别器是一种使用 SVM 算法进行数字识别的系统。SVM 算法是一种二分类算法,它通过找到最大间隔的超平面来将数据点划分为两类。SVM 数字识别器的原理是将数字图像转换为特征向量,然后使用 SVM 算法对特征向量进行分类。SVM 识别是使用 SVM 模型对新的数字图像进行识别的过程。识别过程中,SVM 模型会将新的数字图像映射到特征空间,然后根据超平面来判断新的数字图像属于的类别。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
# 加载数据集
digits = datasets.load_digits()
# 获取特征和标签
X = digits.data
y = digits.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建SVM分类器
clf = SVC(kernel='linear')
# 训练模型
clf.fit(X_train_scaled, y_train)
# 预测测试集
y_pred = clf.predict(X_test_scaled)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# 可视化预测结果的前几个示例
_, axes = plt.subplots(nrows=1, ncols=4, figsize=(10, 3))
for ax, image, prediction in zip(axes, X_test, y_pred[:4]):
ax.set_axis_off()
image = image.reshape(8, 8)
ax.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
ax.set_title(f'Prediction: {prediction}')
plt.show()