python使用KNN算法手写体识别

python使用KNN算法手写体识别

介绍

K最近邻(K-Nearest Neighbor,KNN)算法是一种用于分类和回归的非参数方法。在模型管理中,KNN被认为是一种有监督的学习方法,其中非标记数据分类或回归信息传递给最近邻居的标记数据来预测新输入的标记。

本文将会使用Python编程语言和KNN算法来手写体识别。下面是一个完整的攻略:

总体步骤

步骤1:数据收集

手写数字数据集MNIST,其中包含有60,000个示例的训练集以及10,000个示例的测试集。本文将使用这个数据集,该数据集可在http://yann.lecun.com/exdb/mnist/下载。

在这个数据集中,每个图像都是28×28像素的灰度图像,并且已经标记为0-9的数字之一。

步骤2:数据预处理

在这一步骤中,我们通过Python代码将数据预处理为KNN算法可用的格式。

代码示例:

# 导入相关库
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 加载数据集
train_df = pd.read_csv('mnist_train.csv')
test_df = pd.read_csv('mnist_test.csv')

# 分离特征与标签
X_train = train_df.iloc[:, 1:].values
y_train = train_df.iloc[:, 0].values
X_test = test_df.iloc[:, 1:].values
y_test = test_df.iloc[:, 0].values

# 将特征归一化
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0

# 将数据集分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)

步骤3:训练模型

在这一步骤中,我们将使用KNN算法在数据集上训练模型。

代码示例:

# 构建模型
knn_model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2, metric='minkowski')

# 训练模型
knn_model.fit(X_train, y_train)

步骤4:模型评估

在这一步骤中,我们评估训练出来的模型的准确率。

代码示例:

# 预测验证集
y_val_pred = knn_model.predict(X_val)

# 计算验证集的准确率
val_accuracy = accuracy_score(y_val, y_val_pred)

# 输出准确率
print("Validation Accuracy: {:.2f}%".format(val_accuracy * 100))

步骤5:使用模型预测

在这一步骤中,我们将使用训练好的模型对测试集中的手写数字图像进行预测。

代码示例:

# 预测测试集
y_test_pred = knn_model.predict(X_test)

# 计算测试集的准确率
test_accuracy = accuracy_score(y_test, y_test_pred)

# 输出准确率
print("Test Accuracy: {:.2f}%".format(test_accuracy * 100))

示例1:KNN手写体识别代码的完整实现

下面是使用KNN算法进行手写体识别的完整Python代码:

# 导入相关库
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 加载数据集
train_df = pd.read_csv('mnist_train.csv')
test_df = pd.read_csv('mnist_test.csv')

# 分离特征与标签
X_train = train_df.iloc[:, 1:].values
y_train = train_df.iloc[:, 0].values
X_test = test_df.iloc[:, 1:].values
y_test = test_df.iloc[:, 0].values

# 将特征归一化
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 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_model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2, metric='minkowski')

# 训练模型
knn_model.fit(X_train, y_train)

# 预测验证集
y_val_pred = knn_model.predict(X_val)

# 计算验证集的准确率
val_accuracy = accuracy_score(y_val, y_val_pred)

# 输出准确率
print("Validation Accuracy: {:.2f}%".format(val_accuracy * 100))

# 预测测试集
y_test_pred = knn_model.predict(X_test)

# 计算测试集的准确率
test_accuracy = accuracy_score(y_test, y_test_pred)

# 输出准确率
print("Test Accuracy: {:.2f}%".format(test_accuracy * 100))

示例2:调参

在这个示例中,我们尝试通过调整不同的参数来提高模型的准确率。

代码示例:

# 导入相关库
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 加载数据集
train_df = pd.read_csv('mnist_train.csv')
test_df = pd.read_csv('mnist_test.csv')

# 分离特征与标签
X_train = train_df.iloc[:, 1:].values
y_train = train_df.iloc[:, 0].values
X_test = test_df.iloc[:, 1:].values
y_test = test_df.iloc[:, 0].values

# 将特征归一化
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0

# 将数据集分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)

for k in range(1, 11):
    for metric in ['euclidean', 'manhattan', 'minkowski']:
        # 构建模型
        knn_model = KNeighborsClassifier(n_neighbors=k, weights='uniform', p=2, metric=metric)

        # 训练模型
        knn_model.fit(X_train, y_train)

        # 预测验证集
        y_val_pred = knn_model.predict(X_val)

        # 计算验证集的准确率
        val_accuracy = accuracy_score(y_val, y_val_pred)

        # 输出准确率
        print("k: {}, Metric: {}, Validation Accuracy: {:.2f}%".format(k, metric, val_accuracy * 100))

结论

在本文中,我们介绍了利用Python和KNN算法进行手写体识别的完整攻略,包括数据收集、数据预处理、训练模型、模型评估和使用模型预测等步骤。示例代码也提供了两个具体的案例,读者可在此基础上进一步实践和改进,提高认识和运用KNN算法的能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用KNN算法手写体识别 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 分享四个python接口常用封装函数

    当我们在编写 Python 程序时,有时会使用第三方库或 API 来实现一些功能。在使用这些外部资源时,我们需要使用一些封装函数来使我们的代码更加易于编码和维护。在本篇文章中,我将与大家分享四个 Python 接口常用封装函数。 1. 获取 API 数据 对于许多 Web 操作,我们需要从第三方 API 中获取数据。为了方便代码开发和维护,我们可以编写一个获…

    python 2023年6月3日
    00
  • 如何在Java中使用正则表达式API

    下面是详细的攻略: 如何在Java中使用正则表达式API 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换等操作。在Java中,我们可以使用正则表达式API来实现这些操作。本文将手把手教你如何在Java中使用正则表达式API,并提供两个示例说明。 正则表达式API 在Java中,我们可以使用java.util.regex包中的类来操作正则表达式。…

    python 2023年5月14日
    00
  • 利用Python读取txt文档的方法讲解

    当我们需要处理txt文档的时候,Python可以为我们提供非常方便的读取方式,本文将详细讲解如何利用Python读取txt文档,并提供两个实例。 读取txt文档的方法 Python提供了open函数来打开txt文件,其有很多参数可选,最常见的参数有三个,分别为文件名、模式和编码。 file = open("filename.txt", m…

    python 2023年6月5日
    00
  • python数据可视化的那些操作你了解吗

    当涉及到数据可视化时,Python提供了许多强大的工具和库。以下是Python数据可视化的攻略: 一、选择Python的可视化库 Python的数据可视化库有很多,如matplotlib,seaborn,plotly等等。选择库的关键在于根据项目的需要来选择最适合的库。例如,用于数据探索或图形化呈现的图表类型,不同的库可能采用不同的格式或搭配方式。下面是几个…

    python 2023年5月19日
    00
  • 基于Python爬取京东双十一商品价格曲线

    基于Python爬取京东双十一商品价格曲线是一个非常有用的应用场景,可以帮助我们在Python中快速获取京东双十一商品的价格曲线。本攻略将介绍Python爬取京东双十一商品价格曲线的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取京东商品页面数据的示例: impor…

    python 2023年5月15日
    00
  • 利用Python中的内置open函数读取二进制文件

    读取二进制文件可以使用Python内置的open函数,通过指定读取模式’rb’,来读取文件的二进制数据。 下面是利用Python中的内置open函数读取二进制文件的完整攻略: 1. 打开二进制文件 使用open函数打开二进制文件,可以指定打开模式为’rb’,代码示例: with open(‘test.bin’, ‘rb’) as f: # f为文件对象,可以…

    python 2023年6月2日
    00
  • 对Python中type打开文件的方式介绍

    当使用Python进行文件操作时,我们通常使用内置的open()函数来打开文件。在使用open()函数时,需要传递两个参数给它,第一个是文件路径和名称,第二个则是文件的打开模式(只读、写入、追加等)。 其中,Python中的type函数可以用来查看变量或对象的类型。当使用open()函数打开文件时,返回对象的类型为_IOTextWrapper(Python …

    python 2023年5月31日
    00
  • Python制作词云图代码实例

    下面是“Python制作词云图代码实例”的完整攻略: 1. 准备工作 安装Python环境及相关的库:jieba,wordcloud 准备好需要生成词云图的文本 2. 数据预处理 首先,需要对文本进行预处理,将其中的无用字符剔除,只留下有效的文本部分,例如: import jieba # 读取文本文件 with open(‘input.txt’, ‘r’, …

    python 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部