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日

相关文章

  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例

    调用系统命令、Shell脚本和Python脚本是Nodejs中很常见的操作之一,以下是具体的方法和实例。 调用系统命令 Nodejs中调用系统命令可以使用child_process模块的exec()方法,在回调函数中获取到命令执行后的返回值。 const exec = require(‘child_process’).exec; exec(‘ls -al’,…

    python 2023年6月3日
    00
  • Python try except finally资源回收的实现

    Pyhon 中的 try-except-finally 代码块是一种异常处理机制。当代码中出现异常时,try 代码块中的代码会停止执行,执行流程会跳到 except 代码块中,尝试捕获异常并进行相应的处理。finally 代码块中的代码不管是否出现异常,都会被执行,可以用来进行资源回收等操作。 在 Python 中使用 try-except-finally …

    python 2023年5月13日
    00
  • 使用seaborn绘制强化学习中的图片问题

    使用seaborn库能够方便地绘制强化学习中的数据图表。下面是绘制强化学习中的图片的完整攻略: 准备 在开始绘制之前,需要安装最新版本的seaborn库。可以使用以下命令安装它: pip install seaborn 在绘制一个数据图表前,需要先准备好数据,这里假设我们的数据存储在一个Pandas数据框中。具体而言,本文中的示例使用了q_table数据框。…

    python 2023年5月18日
    00
  • 浅谈python中的正则表达式(re模块)

    浅谈Python中的正则表达式(re模块) 正则表达式是一种强大的文本处理工具,它可以用来匹配、查找、替换文本中的特定模式。在Python中,我们可以使用re模块来实现正则表达式的相关操作。本文将为您详细讲解Python中的正则表达式,包括正则表达的基本语法、re模块的常用函数、以及两个示例说明。 正则表达式的基本语法 正则表式是由一些特殊字符和普通字符组成…

    python 2023年5月14日
    00
  • 4种方法教你利用Python发现数据的规律

    4种方法教你利用Python发现数据的规律 在数据分析和机器学习领域,发现数据的规律是非常重要的。Python作为一种流行的编程语言,提供了多种方法来发现数据规律。本文将介绍4种方法,包括可视化、统计分析、机器学习和深度学习。 可视化 可视化是一种非常直观的方法,可以帮助我们发现数据的规律。Python提供了多种可视化库,包括matplotlib、seabo…

    python 2023年5月13日
    00
  • python urllib.request模块的使用详解

    Python urllib.request 模块的使用详解 Python 的 urllib.request 模块是 Python 自带的 HTTP 请求库,可以用于发送 HTTP 请求。本文将详细介绍 urllib.request 模块的使用方法。 发送 GET 请求 使用 urllib.request 模块发送 GET 请求非常简单,只需要调用 urlop…

    python 2023年5月15日
    00
  • 一文详解Python定时任务触发

    一文详解Python定时任务触发 概述 定时任务,顾名思义就是在指定的时间点或时间间隔内执行一些任务。在Python中,我们可以使用多种方式来实现定时任务触发。本文将详细介绍Python中两种常用的定时任务触发机制:time.sleep()和sched模块,以及其用法。 time.sleep()实现定时任务 time.sleep()方法可以让程序暂停指定的时…

    python 2023年5月19日
    00
  • python爬取企查查企业信息之selenium自动模拟登录企查查

    在本攻略中,我们将介绍如何使用Selenium自动模拟登录企查查,并爬取企业信息。以下是一个完整攻略,包括两个示例。 步骤1:安装必要的库 首先,需要安装必要的库。我们将使用Selenium库来自动模拟登录企查查,并使用BeautifulSoup库来解析HTML页面。 以下是一个示例代码,演示如何使用pip安装Selenium和BeautifulSoup: …

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