Python:K-近鄰演算法

qq_33302842發表於2017-12-06

-----------------------------------------------------------------------------------------------直接把註釋全部去掉跑即可,每個方法都有說明-------------------------------------------------------------------------

#K-近鄰演算法

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;


'''

intX 目標:[1,1]
dataSet 參考值
labels 參考值 對於的目標值
k:前K值
歐氏距離演算法
'''
def classify0(intX, dataSet, labels, k):
    #矩陣第一維度的長度

    dataSetSize  =dataSet.shape[0];

    #tile行重複intX,dataSetSize次,列0次
    diffMat = tile(intX, (dataSetSize, 1)) - dataSet;
    # 2的次方
    sqDiffMat = diffMat ** 2;
    #矩陣求和
    sqDistances =sqDiffMat.sum(axis=1);
    #開方
    distances = sqDistances ** 0.5;
    #argsort()函式是將x中的元素從小到大排列,提取其對應的index(索引)
    sortedDistIndicies = distances.argsort();
    classCount = {};
    for i in range(k):

      #獲取的距離對於的參考值的目標值分類存在字典classCount
      voteIlabel = labels[sortedDistIndicies[i]];
      #get(voteIlabel, 0)獲取不到voteIlabel就設定預設值為0
      classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
      '''
      引數解析:
      cmp:比較函式,比較什麼引數由key決定。例如:cmp(e1, e2) 是具有兩個引數的比較函式,返回值:負數(e1 < e2);0(e1 == e2);正數( e1 > e2)。
      key:用列表元素的某個屬性或函式作為關鍵字。
      reverse:排序規則,可以選擇True或者False。
      operator.itemgetter(1): 取物件的第1個域的值
      '''
      sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
      pass

    return sortedClassCount[0][0];

-----------------------------------------------------------------------------------------------直接把註釋全部去掉跑即可-------------------------------------------------------------------------

上面是理論知識,接下來有時間會更新實戰

相關文章