Python学习笔记,KNN算法简单应用

本文深入浅出地介绍了KNN算法的基本原理,通过生动的地理位置归属示例帮助理解。并以鸢尾花数据集为例,详细展示了KNN算法在Python中的具体实现过程,包括距离计算、排序及类别预测。

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

KNN算法

什么是KNN算法?
个人觉得比较通俗的解释是:有几个类别,已经分好了,现在又来了一个数据,这个数据应该归为哪一类的,像哪个不就归哪一类吗。怎么个像法呢?举例说一下:
比方说我老家在离安徽,江西,浙江都比较近,那么我是哪个省的呢?这里排除政治划分,就考虑距离因素。比方我是在A城市,安徽有B,C,D三个城市;江西有E,F,G三个城市;浙江也有H,I,J三个城市。那么我可以分别计算一下A到各个城市的距离,如何按距离从小到大排序一下。我就看看排最前面4个城市都是哪个省的。计算到浙江有两个,安徽有一个,江西有一个。那么我就是浙江省的了(哈哈,我本来就是浙江滴)。
这是一种分类思想。下面是关于iris数据集的KNN具体应用,来预测鸢尾花的种类。
下面是代码:

from numpy import *
from sklearn import datasets
import operator
def knn(k,testdata,traindata,labels):
    #得到训练数据的行数
    datasize = traindata.shape[0]
    #将测试数据的维数扩展到和训练数据一样的维数,并计算差值
    dif = tile(testdata,(datasize,1)) - traindata
    #计算差值平方
    sqdif = dif**2
    #每一行求和
    sumdif = sqdif.sum(axis = 1)
    #开方求距离
    distance = sumdif**0.5
    #将距离排序
    sortdis = distance.argsort()
    count = {}
    #取距离最近的k个数据
    for i in range(0,k):
        vote = labels[sortdis[i]]
        #统计类别个数
        count[vote] = count.get(vote,0)+1
        sortcount = sorted(count.items(),key = operator.itemgetter(1),reverse = True)
        return sortcount[0][0]

traindata = datasets.load_iris().data
testdata = [[6.3, 2.5, 5.3 , 1.9]]
labels = datasets.load_iris().target

label = knn(3,testdata,traindata,labels)
if label == 0:
    print("setosa")
if label == 1:
    print("versicolor")
if label == 2:
    print("virginica")

距离计算方法大家都知道,就一步步去完成就可以了。
距离计算完成后,对其进行排序

sortdis = distance.argsort()

接下来是统计距离最近的K个数据

for i in range(0,k):
        vote = labels[sortdis[i]]
        #统计类别个数
        count[vote] = count.get(vote,0)+1

出现一次类别,就+1

最后是找出出现次数最多的类别:

sortcount = sorted(count.items(),key = operator.itemgetter(1),reverse = True)

代码的意思为按字典中值得大小进行降序排序,key = operator.itemgetter(1)表示的是字典的值。

最后是载入数据集,利用KNN进行预测。预测的结果为:virginica

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值