机器学习算法学习01——k-近邻算法及手写数字识别系统

本文介绍了k-近邻(kNN)算法,包括其原理、Python实现以及在手写数字识别系统中的应用。通过实验展示了kNN算法在分类任务上的效果,并探讨了算法的优缺点,如计算复杂度高、空间复杂度高。通过将图像转换为测试向量,使用kNN算法对手写数字进行识别,调整k值以观察对准确率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、kNN算法概述

1.k邻近算法直译为K个最近的邻居,是一种聚类算法。采用测量不同特征值之间的距离方法进行分类。基于大量数据的基础上,做出相应的预测,一般运用于手写数字识别,约会网站的大量数据匹配等等。

2.优点:精度高,对异常值不敏感,无数据输入假定.

3.缺点:计算复杂度高,空间复杂度高。

4.适用数据范围是:数值型和标称型。

二、算法原理

以《机器学习实战》第二章导言为例我们需要鉴别某个电影的类别,我们通过比对发现他和我们列举的中5个电影相似,我们发现这5个镜头其中4个是打斗,1个是接吻,所以判定这部电影是武打片。这就是一个5NN算法。

总结出他的流程:
输入:数据x 已知类别的样本z
输出:x的类别y

1.计算数据x与z中每个样本的距离d

2.利用距离d获取与x距离前K小的索引index

3.利用index从样本z中选取出k个样本

4.统计这k个样本的类别,类别数统计最多的作为x的类别
在这里插入图片描述

三、相关代码

1.准备:使用Python导入数据

导入两个模块,一个是科学计算包NumPy,还一个是运算符模块。定义createDataSet函数,使用该函数创建数据集和标签。
这里有4组数据,每组数据有两个我们已知的属性或特征值,向量labels包含了每个数据点的标签信息,labels包含的元素个数等于group矩阵行数。

from numpy import  *  #导入科学计算包Numpy
import  operator      #导入运算符模块

def createDataSet():
    group=array([[3,104],[2,100],[101,10],[99,5]])  #导入四部电影[打斗镜头次数,接吻镜头]
    labels=['A','A','B','B']    #labels分类标签,A为爱情片,B为接吻镜头
    return group,labels

2.从文本文件中解析数据

伪代码:对未知类别属性的数据集中的每个点依次执行以下操作
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的k个点;
(4)确定前k个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。


def classify0(intX,dataSet,labels,k): 
  	dataSetSize=dataSet.shape[0]    
    diffMat=tile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值