k-邻近算法(二)

# -*- coding: UTF-8 -*-    
from numpy import *
import operator 

def createDataSet(): 
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) 
    labels = ['A','A','B','B']
    return group, labels 
    
def classify0(inX, dataSet, labels, k):#用于分类的输入向量,训练样本集,标签,最近邻居数目
    dataSetSize = dataSet.shape[0]#shape用法:读取矩阵的长度,shape[0]即读取dataSet的第一维度长度,这里是4
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    '''reps的数字 从后往前 分别对应A的第N个维度的重复次数。如tile(A,2)表示A的第一个维度重复2遍,
    tile(A,(2,3))表示A的第一个维度重复3遍,然后第二个维度重复2遍,tile(A,(2,2,3))表示A的第一个维度重复3遍,
    第二个维度重复2遍,第三个维度重复2遍。此例中表示([],[])
    '''
    sqDiffMat = diffMat**2 #**指乘方,**2指2次方
    sqDistances = sqDiffMat.sum(axis=1)#sum求和,对于一维数组axis=0,默认所有相加,二维数组axis=1表示按行相加,axis=0表示按列相加
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()#argsort是排序,将元素按照由小到大的顺序返回 下标 ,比如([3,1,2]),它返回的就是([1,2,0])
    classCount={}
    for i in range(k):
        votelabel = labels[sortedDistIndicies[i]]
        classCount[votelabel] = classCount.get(votelabel,0) + 1#Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#iteritems返回字典序,3.x中已废除。itemgetter表示按第一个域排序。reverse=True指降序
    return sortedClassCount[0][0]

每次出现错误然后再检查就是字打错了。但是有个问题,就是在更改正确点击Save以后再次执行代码的时候仍然会报错,尝试重新import,但似乎仍然不行,现在已知可行方法是关了重新打开,太麻烦了。觉得应该有解决方式才对。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章