欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

机器学习实战、第二章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’
    机器学习实战、第二章KNN算法详解、AttributeError: ‘dict‘ object has no attribute ‘iteritems‘

原因:Python3.5中:iteritems变为items。
解决办法:iteritems变为items即可。
机器学习实战、第二章KNN算法详解、AttributeError: ‘dict‘ object has no attribute ‘iteritems‘

  • 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):
机器学习实战、第二章KNN算法详解、AttributeError: ‘dict‘ object has no attribute ‘iteritems‘

本文地址:https://blog.csdn.net/shooter7/article/details/110474270