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,但似乎仍然不行,現在已知可行方法是關了重新打開,太麻煩了。覺得應該有解決方式纔對。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章