机器学习 K-近邻算法

本文介绍了机器学习中的K-近邻(KNN)算法,详细阐述了其算法原理,即通过计算未知点与已知点的距离,选择最近的K个点,并根据这些点的类别进行投票决定未知点的类别。还给出了一个具体的实例,包括4个已标记的点,以及如何使用Python实现KNN算法得出未知点[9,6]的分类。" 118640735,8753399,wxWidgets:跨平台文件操作指南,"['C++', '文件操作', '跨平台开发', '库函数']

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

KNN算法属于有监督学习中的分类算法

算法原理:

1 计算未知点与已知点的距离

2 列出前K个与此未知点最近的已知点(已经归好类有标签)

3 统计此K个中出现最多次数的归类并把未知点归为此类。


实例:

有4个带标签的点 

[0,10]  A 

[0,8]   A

[10,0] B

[7,0]  B


求未知点[9,6]应该归为哪类

python实现如下:

from numpy import *
import operator
from os import listdir

def createDataSet():
    group = array([[0,10],[0,8],[10,0],[7,0]])
    labels = ['A','A','B','B']
    return group, labels


def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]#查看有几行标签
    print('dataSetSize',dataSetSize)
    
    diffMat = tile(inX, (dataSetSize,1)) - dataSet #每行复制一个未知点-每个已知点
    print('diffMat\n',diffMat)
    
    sqDiffMat = diffMat**2 #得到的差进行平方消除负数
    sqDistances = sqDiffMat.sum(axis=1) #把每个点得到的两个数如(25,16)进行相加得到 41
    distances = sqDistances**0.5 #每个进行开方
    print('distances',distances)
    
    sortedDistIndicies = distances.argsort()  #按大小进行标号0 1 2 3...
    print('sortedDistIndicies',sortedDistIndicies)

    classCount={}          
    for i in range(k):
        #按上面的距离的远近已经标上号的如[2,1,0,3]对应ABCD 按CBAD排序
        voteIlabel = labels[sortedDistIndicies[i]]
        print('voteIlabel',voteIlabel)
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1   #统计各标签出现的次数 

    # 把字典按出现频率排序变成二维向量
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    # 返回排最前的那个的标签
    return sortedClassCount[0][0]


group,labels = createDataSet()
print(classify0([9,6],group,labels,3))


运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值