k-近邻算法(python)

本文深入讲解了k-近邻算法(KNN)的工作原理,包括如何通过测量不同特征值之间的距离进行分类,以及算法的具体实现过程。文章提供了Python代码示例,展示了如何创建数据集、解析数据并应用KNN算法。

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

k-近邻算法(KNN)的原理:采用测量不同特征值之间的距离方法进行分类

定义:存在一个样本数据集,并且每个数据集都有标签,我们称之为训练样本集。输入新的样本数据,通过与训练样本集中的特征进行比较,算法选择样本特征最相似数据(最近邻)的数据标签。 通常选取样本数据集中前k个最相似的数据中出现次数最多的分类,即为样本的分类。

k-近邻算法的一般流程:

1)收集数据:可以使用任何方法

2)准备数据:距离计算所需要的数值,最好是结构化的数据格式

3)分析数据:可以使用任何方法

4)训练算法:此步骤不适用于k-近邻算法

5)测试数据:计算错误率

6)使用算法

 1.使用Python导入数据

from numpy import *
import operator #operator为运算符模块

def creatDataSet():
    group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels=['A','A','B','B']
    return group,labels

把上述代码保存为KNN.py,打开终端,改变当前路径到存储KNN.py文件的位置,然后导入:

>>>import kNN

在python命令提示符下输入下述指令:

group,labels=kNN.creatDataSet()

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

def classify0(inx,dataSet,labels,k):#inx:用于分类的输入向量  dataSet:输入的训练样本集 labels:标签向量  k:用于选择最近邻居的数目
    #距离计算
    dataSetSize = dataSet.shape[0]
    diffMat=tile(inX,(dataSetSize,1))-dataSet #把InX复制为dataSetSize行,1列
    sqDiffMat=diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)
    distances=sqDistances**0.5
    #对得到的距离按从小到大的次序排序
    sortedDistIndicies=distances.argsort()
    #选择距离最小的k个点
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1    
    sortedClassCount=sorted(classCount.iteritems(),
key=operator.itemgetter(1),reverse=True)#获取第二列的数据,逆序排序(从大到小),返回频率最高的元素标签

    
    

tile函数的用法:重复某个数组 

>>> from numpy import *
>>> a=[0,1,2]
>>> b=tile(a,2)
>>> b
array([0, 1, 2, 0, 1, 2])


>>> b=tile(a,(1,2))
>>> b
array([[0, 1, 2, 0, 1, 2]])


>>> b=tile(a,(2,1))
>>> b
array([[0, 1, 2],
       [0, 1, 2]])

下一节我们将在现实生活中应用k-近邻算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值