首页 > 编程语言 >Python从0到100(五十四):K近邻算法及⼿写数字识别数据集分类

Python从0到100(五十四):K近邻算法及⼿写数字识别数据集分类

时间:2024-08-25 22:23:32浏览次数:11  
标签:KNN plt Python 近邻 样本 五十四 算法 test 100

K最近邻(K-Nearest Neighbors,简称KNN) 是⼀种常⽤的监督学习算法,主要⽤于分类和回归问题。KNN的基本原理是基于特征空间中样本点的距离来进⾏预测或分类。对于分类问题,KNN找到与待分类样本在特征空间中最近的K个训练样本,并基于它们的类别标签进⾏投票决策。对于回归问题,KNN找到最近的K个训练样本,并计算它们的平均值或加权平均值来预测待预测样本的数值输出。

1.基本原理

1、距离度量: KNN基于样本点之间的距离来度量它们的相似性。通常使⽤欧几里得距离、曼哈顿距离、闵可夫斯基距离等来计算距离。
2、K值选择: KNN中的K表示选择最近邻的数量。通过选择不同的K值,可以调整模型的复杂性。较小的K值可能会导致模型对噪声敏感,⽽较⼤的K值可能会导致模型过于平滑。
3、投票或平均: 对于分类问题,KNN对最近的K个训练样本的类别标签进⾏投票,然后将得票最多的类别标签分配给待分类样本。对于回归问题,KNN计算最近的K个训练样本的数值输出的平均值或加权平均值,并将结果⽤作待预测样本的输出。

2.公式模型

KNN的核⼼公式涉及到距离度量和K个最近邻的选择。
1.距离度量: KNN使⽤距离度量来计算样本之间的距离。对于两个样本点xi和xj,欧几里得距离的计算公式为:
在这里插入图片描述
其中,n是特征的数量。
2.K个最近邻的选择: 对于分类问题,KNN选择与待分类样本距离最近的K个训练样本,然后根据它们的类别标签进⾏投票决策。对于回归问题,KNN选择与待预测样本距离最近的K个训练样本,然后计算它们的数值输出的平均值或加权平均值来预测。

3.优缺点

优点:

  1. 简单直观:K近邻算法易于理解和实现,⽆需对模型进⾏训练。
  2. 适⽤于多类别问题:K近邻算法可以处理多类别问题,并且对类别不平衡的数据集也⽐较有效。
  3. 适⽤于⾮线性数据:K近邻算法适⽤于⾮线性关系的数据。

缺点:

  1. 需要⼤量内存:K近邻算法需要保存整个训练集,因此对内存消耗较⼤。
  2. 预测速度较慢:对于⼤型数据集,预测速度较慢,因为需要计算待预测样本与所有训练样本的距离。
  3. 对异常值敏感:K近邻算法对异常值较为敏感,可能会影响预测结果。

4.适用场景

K近邻算法适⽤于以下场景:

  1. 数据集较小:当数据集规模较小且特征维度不⾼时,K近邻算法表现较好。
  2. 非线性数据集:对于非线性关系的数据集,K近邻算法通常表现良好。
  3. 需要解释性强的模型:K近邻算法能够提供直观的解释,因此适用于需要可解释性强的场景。

K近邻算法是⼀种简单而强⼤的监督学习算法,尤其适用于小型数据集和非线性数据集。然而,在处理⼤型数据集和⾼维数据时,K近邻算法的性能可能不如⼀些更复杂的算法。

5.手写数字识别数据集分类

使⽤手写数字识别数据集(MNIST dataset)。这个数据集包含了⼤量的⼿写数字图片及其对应的标签,我们将使⽤K近邻算法来对这些手写数字进行分类。
在这里插入图片描述
⾸先加载了⼿写数字数据集,并划分了训练集和测试集。然后我们构建了⼀个K近邻分类器,并在测试集上进行了预测。接着,我们计算了模型的准确率,并绘制了混淆矩阵来评估模型的性能。
在这里插入图片描述
最后,我们随机选择了⼀些样本并展示了它们的预测结果。

Accuracy: 0.9861111111111112

完整代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
# 加载⼿写数字数据集
digits = 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)
# 构建K近邻模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# 在测试集上进⾏预测
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
plt.imshow(conf_matrix, cmap='Blues')
plt.colorbar()
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
# 随机选择⼀些样本并展示预测结果
plt.figure(figsize=(10, 8))
for i in range(10):
    idx = np.random.randint(0, len(X_test))
    image = X_test[idx].reshape(8, 8)
    plt.subplot(2, 5, i+1)
    plt.imshow(image, cmap='binary')
    plt.title(f'Predicted: {y_pred[idx]}, Actual: {y_test[idx]}')
    plt.axis('off')
plt.show()

KNN是⼀种简单⽽直观的算法,它不需要训练过程,但在处理⼤规模数据集时可能会变得计算密集。选择合适的距离度量和K值是KNN的关键,通常需要根据具体问题进⾏调整和优化。此外,KNN在处理不平衡数据和⾼维数据时可能会表现不佳,因此需要谨慎选择适⽤场景。

标签:KNN,plt,Python,近邻,样本,五十四,算法,test,100
From: https://blog.csdn.net/weixin_51390582/article/details/140531570

相关文章

  • 【有源码】基于python的国内地震数据可视化分析与预测系统hadoop项目hive计算机程序设
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统展示3.1功能展示视频3.2页面页面4更多推荐5部分功能代码1.开发环境开发语言:Python采用技术:K-means算法数据库:MySQL开发环境:PyCharm2系统......
  • Python pdf 转 docx
    本文介绍了用pdf2docx将pdf转成docx的方法,发现转换的时间较长,而且没有进度,仅在控制台有输出,而convert的逐页转换会生成多个docx,因此写了个逐页转换的demo首先是基本的使用importpdf2docxfromdocxcomposeimportcomposerfrompdf2docximportparsedefconvert......
  • 27.Python练习题
    1,列举布尔值为False的值0False‘’   [] {}None 2,写函数:根据范围获取其中3和7整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和如:deffunc(start,end): 3,函数的默认返回值是什么?None 4,简述break\continue\return的区别Bre......
  • lvm 扩容 pvresize -v /dev/vdb lvextend -l +100%FREE /dev/vgdata/lvdata
    以root用户登录弹性云主机。执行fdisk-l命令,查看系统是否正确识别扩容后的磁盘。具体回显如图所示:扩容前/dev/vdb的容量是10GB,扩容后为20GB。执行pvdisplay命令,查看LVM的物理卷相关信息。具体回显如图所示:/dev/vdb的容量是10GB,说明物理卷容量未增加。执行pvresize-v 磁......
  • 使用 Python 构建简易图书馆借阅系统
    本文将介绍一个简单的图书管理系统的实现。这个系统用Python编写,可以帮助我们管理图书馆中的图书,包括新增图书、借阅图书、归还图书以及显示图书馆当前藏书的状态。引言图书馆是提供信息和知识的重要场所。为了更好地管理图书馆中的图书,我们需要一个简单易用的管理系统。下......
  • python数据分析中包含很多图像?如何使用这些图像进行数据分析呢?
    在Python中进行数据分析时,选择不同的图案来分析数据可以帮助我们更好地理解数据的特征和关系。以下是一些常见的数据分析图形和它们的应用场景:条形图(BarPlot):适合表示类别型数据的分布或比较不同类别的数据。可以使用水平或垂直的条形图。折线图(LinePlot):适合表示随时间变化......
  • 基于python+flask框架的医疗健康信息管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着科技的飞速发展和人口老龄化的加剧,医疗健康领域面临着前所未有的挑战与机遇。传统的医疗健康管理模式已难以满足日益增长的健康管理需......
  • Java基础课设,大作业,小游戏--------数字华容道[无偿提供源代码]100%可以运行
    成品游戏胜利1.准备图片0.png1.png2.png3.png4.png5.png6.png7.png8.png9.png10.png11.png12.png13.png......
  • 基于python+flask框架的赛事管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着体育产业的蓬勃发展,各类赛事活动层出不穷,从地方性小型比赛到国际级大型赛事,都面临着参赛者众多、赛事组织复杂、信息管理繁琐等挑战。......
  • 基于python+flask框架的鹿野巷咖啡店销售管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快节奏的城市生活中,咖啡已成为许多人日常生活中不可或缺的一部分,它不仅是一种饮品,更是一种生活态度和社交方式。随着咖啡文化的普及......