1.KNN 一、简单k-近邻算法

本文深入探讨了KNN算法的工作原理,详细解释了如何通过计算欧氏距离找到最近邻,进而进行分类预测。文章提供了Python实现代码示例,展示了如何创建数据集,使用KNN算法进行分类,并返回预测结果。

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

 

https://www.bilibili.com/video/av36993857?from=search&seid=9140941500805535513

https://blog.youkuaiyun.com/c406495762/article/details/75172850

https://cuijiahua.com/blog/2017/11/ml_1_knn.html

knnm没有训练的过程,直接进行分类。

F7,F8,F9,用来debug的。

选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

返回前k个点所出现频率最高的类别作为当前点的预测分类。

用欧氏距离(也称欧几里德度量)

我们可以使用多种方法检测分类器的正确率。此外分类器的性能也会受到多种因素的影响,如分类器设置和数据集等。

F7是进入到函数执行语句中;F8逐行语句跑程序;F9是下一个断点,用来跳过多次的for循环语句;

# 2020.01.28
import numpy as np
import operator
def creatDataSet():
    trainData = np.array([[1,101],[5,89],[108,5],[115,8]])# 4行2列
    trainlabel = ['爱情片','爱情片','动作片','动作片']
    return trainData, trainlabel

def classifyKNN(testData, trainData, trainLabel, k):
    dataSetSize = trainData.shape[0] #行数
    # tile tile函数的作用是让某个数组以某种方式重复
    diffMat = np.tile(testData, (dataSetSize, 1)) - trainData # 差值
    sqDiffMat = diffMat**2 #差值的平方
    sqDistances = sqDiffMat.sum(axis = 1)#差值的平方和
    distances = sqDistances ** 0.5#差值的平方和开根号
    sortedDistIndices = distances.argsort()# 从0开始,从小到大排序
    classCount = {}#
    for i in range(k): # k为0,1,2;
        voteIlabel = trainLabel[sortedDistIndices[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1),reverse = True)
    return sortedClassCount[0][0]

if __name__ == '__main__':
    trainData, trainLabel = creatDataSet()
    testData = [101, 20]
    testLabel = classifyKNN(testData, trainData, trainLabel, 3)
    print(testLabel)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值