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

xiaoxiao2022-06-11  13

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

转载请注明原文地址: https://www.6miu.com/read-4931999.html
最新回复(0)