Python机器学习sklearn实现识别数字
摘要
这篇文章将详细讲解如何使用Python和Sklearn库实现数字识别。我们将会使用一个数据集来训练模型,该数据集包含了数千张手写数字的图片。我们将首先对数据进行清洗和预处理,然后使用Sklearn中的SVM(支持向量机)算法来训练我们的模型。最后,我们将评估模型的准确性,并使用它来预测新的手写数字。
数据集
我们将使用MNIST数据集来训练我们的模型。该数据集包含了70,000张28x28像素的手写数字图片。这些图片已经被标记,因此我们可以使用它们来训练我们的模型。
你可以从Yann LeCun的网站上下载该数据集:http://yann.lecun.com/exdb/mnist/
数据清洗与处理
在开始训练模型之前,我们需要对数据进行清洗和预处理。首先,我们需要将图片转换为一维数组。然后,我们需要将像素值缩放到0到1之间。这将有助于算法更好地训练模型。
以下是将图片转换为一维数组的代码示例:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
X = mnist.data.astype('float32') / 255.
接下来,我们需要将数据集划分为训练集和测试集。通常情况下,我们使用80%的数据作为训练集,20%的数据作为测试集。我们将使用Sklearn中的train_test_split方法来实现此操作。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, mnist.target, test_size=0.2)
训练模型
我们将使用SVM算法来训练我们的模型。具体而言,我们将使用SVC(支持向量分类)类来实现分类。我们将使用Sklearn中的GridSearchCV方法来寻找最佳的参数组合。
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid = [
{'C': [0.1, 1, 10], 'kernel': ['linear']},
{'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1], 'kernel': ['rbf']},
]
svc = SVC()
clf = GridSearchCV(svc, param_grid, cv=5)
clf.fit(X_train, y_train)
评估模型
使用测试集评估模型的准确性:
from sklearn.metrics import accuracy_score
predictions = clf.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: {:.2%}".format(accuracy))
使用模型进行预测
现在我们已经训练并评估了模型,我们可以使用它来预测新的手写数字。以下是一个使用模型预测数字的示例:
import matplotlib.pyplot as plt
image = X_test[0].reshape(28, 28)
plt.imshow(image, cmap='gray')
prediction = clf.predict([X_test[0]])
print("Prediction:", prediction[0])
结论
Python和Sklearn库使得实现数字识别变得简单。在此过程中,我们学习了如何使用SVM算法来训练模型,使用GridSearchCV方法来寻找最佳参数,以及如何评估模型的准确性并使用它来预测新的手写数字。这篇文章提供了一个非常好的起点,使您可以开始在Python中实现机器学习项目。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python机器学习sklearn实现识别数字 - Python技术站