机器学习实战、第二章KNN算法详解、AttributeError: ‘dict‘ object has no attribute ‘iteritems‘
程序员文章站
2022-07-02 22:56:02
机器学习实战、第二章KNN算法详解、AttributeError: ‘dict’ object has no attribute ‘iteritems’python3.5后代码存在问题AttributeError: ‘dict’ object has no attribute ‘iteritems’原因:Python3.5中:iteritems变为items。解决办法:iteritems变为items即可。KNN算法详细的代码及注释:from numpy import *import...
机器学习实战、第二章KNN算法详解、AttributeError: ‘dict’ object has no attribute ‘iteritems’
- python3.5后代码存在问题AttributeError: ‘dict’ object has no attribute ‘iteritems’
原因:Python3.5中:iteritems变为items。
解决办法:iteritems变为items即可。
- KNN算法详细的代码及注释:
from numpy import *
import operator
def creatDataSet():
#可以看做4行一列的二维数组
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group,labels
group,labels=creatDataSet()
#inx是待分类的数据,dataSet是上面的group,lables是上面的,K自己设定的值
def classify0(inx,dataSet,labels,k):
# 有多少组数据,上面的group中有4组
dataSetSize = dataSet.shape[0]
#用tile将inx复制4个一模一样的,然后减去dataset,相当于见(x1,y1)与(x2,y2)做差
diffMat = tile(inx,(dataSetSize,1))-dataSet
#上面的一行是进行了做差,这行是进行做差后的平方
sqDiffMat= diffMat**2
# axis=1是列相加,,得到了(x1-x2)^2+(y1-y2)^2
sqDistance=sqDiffMat.sum(axis=1)
#用的是欧式距离,然后进行开根号
distance=sqDistance**0.5
#argsort是排序,将元素按照由小到大的顺序返回下标,比如([3,1,2]),它返回的就是([1,2,0])
sortedDistIndicies=distance.argsort()
classCount={}
for i in range(k):
#依次取前K个的标签
voteIlable = labels[sortedDistIndicies[i]]
# get是取字典里的元素,如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,
# 如果没有就返回0(后面写的),这行代码的意思就是算离目标点距离最近的k个点的类别,这个点是哪个类别哪个类别就加1
classCount[voteIlable] = classCount.get(voteIlable,0)+1
# key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),
# 即‘1’‘2’排序。reverse=True是降序排序
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
#返回K值最大的预测标签
return sortedClassCount[0][0]
print(classify0([0,0],group,labels,3))
算法运行结果(因为输入[0,0],k取3,所以前3个中有两个B一个A,取最多的,所以结果就是B):
本文地址:https://blog.csdn.net/shooter7/article/details/110474270