python使用KNN算法手写体识别

yizhihongxing

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做一个简单的贪吃蛇? 作为一名Python爱好者,想必你对Python的学习及应用有了一定的基础。当你已经学习了一段时间的Python后,做一个简单的游戏可以帮助你更好地巩固所学的知识,并且更好地理解Python的面向对象编程。 在这里,我将向你分享一个制作简单贪吃蛇游戏的完整攻略。这个游戏的规则是很简单的:你需要控制一条蛇,让它在屏幕上吃…

    python 2023年5月19日
    00
  • 解决Keyerror ”acc” KeyError: ”val_acc”问题

    当模型在训练过程中出现 ‘KeyError: “acc”‘ 或者 ‘KeyError: “val_acc”‘ 错误时,说明在训练历史记录中找不到对应的准确率指标。在解决这个问题之前,我们先来了解一下准确率指标。 准确率(accuracy)是一个非常常用的模型性能指标,它用来衡量分类模型的预测结果与真实标签一致的概率。在Keras训练模型时,常用的准确率指标包…

    python 2023年5月13日
    00
  • Python网络安全格式字符串漏洞任意地址覆盖大数字详解

    下面是详细的攻略: Python网络安全格式字符串漏洞任意地址覆盖大数字详解 Python网络安全格式字符串漏洞任意地址覆盖大数字是一种常见的安全漏洞,可以导致程序崩溃或者执行任意代码。本文将介绍这个漏洞的原理、影响和防范措施。 漏洞原理 Python中的格式字符串是一种用于格式化输出的字符串。例如,我们可以使用print()函数来输出格式化字符串: nam…

    python 2023年5月14日
    00
  • 是否可以使用字典理解在 python 中反转字典

    【问题标题】:is it possible to reverse a dictionary in python using dictionary comprehension是否可以使用字典理解在 python 中反转字典 【发布时间】:2023-04-06 02:26:01 【问题描述】: 我想使用字典推导来反转字典 key, value 对,但如果新字典有…

    Python开发 2023年4月6日
    00
  • 使用成对的输入文件和多个输出文件编写 bash 或 python for 循环

    【问题标题】:Writing a bash or python for loop with paired input files and multiple output files使用成对的输入文件和多个输出文件编写 bash 或 python for 循环 【发布时间】:2023-04-06 04:38:01 【问题描述】: 我正在研究用于分析 RNA-s…

    Python开发 2023年4月7日
    00
  • python 多线程重启方法

    Python是一种单线程语言,但是它提供了多线程编程的实现机制。当Python程序需要同时处理多个任务时,可以使用多线程编程技术,多个共享内存资源的线程可以同时执行,提高了程序的执行效率。但是多线程编程也会引发一些问题,比如多线程竞争、线程死锁等。本攻略将会详细讲解Python多线程的重启方法,以及重启方法的两个示例说明。 什么是线程重启? 多线程编程中,当…

    python 2023年5月18日
    00
  • Python文件基本操作实用指南

    以下是详细讲解“Python文件基本操作实用指南”的完整攻略,包含两个示例说明。 1. 打开文件 在Python中,我们可以使用open()函数来打开一个文件。open()函数的语法如下: open(file, mode=”, buffering=-1, encoding=None, errors=None, newline=None, closefd=T…

    python 2023年5月14日
    00
  • 如何在Python中更新MySQL数据库中的数据?

    以下是在Python中更新MySQL数据库中的数据的完整使用攻略。 使用MySQL数据库的前提条件 在使用Python连接MySQL数据库之前,确保已经安装了MySQL数据库,并已经创建使用数据库和表。同时,还需要安装Python的驱动程序,例如mysql-connector-python。 步骤1:导入模块 在Python中使用mysql.connecto…

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