k-近鄰算法 python實現


必要的注釋已經寫在code里面了;

import operator
from numpy import*

def init():
    grp=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    lab=['A','A','B','B']
    return grp,lab

def Classify(inX,dataset,lab,k):
    # 用於分類的向量inX;數據集dataset;屬性向量lab;k近鄰
    datasize=dataset.shape[0]# 行大小
    difmt=tile(inX,(datasize,1))-dataset
    # tile: 將inX復制成一個 行大小為datasize,列大小為1的矩陣

    ######------ 計算歐幾里得距離 ------#######
    sqrdif=difmt ** 2
    sqrdist=sqrdif.sum(axis=1)
    distance=sqrdist** 0.5
    ##########################################
    sortedDisIndex=distance.argsort()
    # 排序后獲得索引值

    classcnt={}
    for i in range(k):# 取前k個
        vtlab=lab[sortedDisIndex[i]]
        classcnt[vtlab]=classcnt.get(vtlab,0)+1

    sortedClasscnt=sorted(classcnt.items(),key=operator.itemgetter(1),reverse=True)
    # sorted:itemgetter(1)按照第二關鍵字排序,即按照個數從大到小排序(因為reverse=True)
    return sortedClasscnt[0][0]

grp,lab=init()
ans=Classify([0,0],grp,lab,3)
print(ans)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM