<Python><有監督>kNN--近鄰分類演算法

來源:互聯網
上載者:User

標籤:knn   python   演算法   

有監督的kNN近鄰演算法:

(1)計算已知類別資料集中的點與當前點之間的距離

(2)按照距離遞增次序排序

(3)選取與當前點距離最小的k個點

(4)確定前k個點所在類別的出現頻率

(5)返回前k個點出現頻率最高的類別作為當前點的預測分類


#資料範例

1 2:a

1 3:a
1 4:a
1 5:b
6 2:b
6 3:b
100 200:c
101 199:c
300 444:d
299 50:d

1000 10000:d


#版本0:純python

"kNN"from math import sqrtfrom collections import Counterdistance=lambda a,b:sqrt(sum(map(lambda ai,bi:pow(ai-bi,2),a,b))) if len(a)==len(b) else "Error0:data length match fail"distance2=lambda a,b:distance([int(i) for i in a.split()],[int(i) for i in b.split()])  # for strings#print(distance2('1 2 4 7 8','2 5 5 6 110'))readData=lambda file:{line.split(':')[0]:line.strip().split(':')[1] for line in open(file)}#print(readData())def judgeSpot(fileIn='test0.txt',x='1 2',num=5):    distanceDict,data={},readData(fileIn)    for k in data:        distanceDict[str(distance2(x,k))]=data[k]    # sortDistance=sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num]    # kindDict=[item[1] for item in sortDistance]    return sorted(dict(Counter(item[1] for item in sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num])).items(),key=lambda x:x[1],reverse=True)[0][0]#print(judgeSpot('1000 10000','test0.txt'),)def judgeSpot2(dataIn,x='1 2',num=5):    distanceDict,data={},dataIn    for k in data:        distanceDict[str(distance2(x,k))]=data[k]    # sortDistance=sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num]    # kindDict=[item[1] for item in sortDistance]    return sorted(dict(Counter(item[1] for item in sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num])).items(),key=lambda x:x[1],reverse=True)[0][0]print(judgeSpot('test0.txt','1000 10000'),)#Rate of Rightdef rateRight(fileIn='test0.txt',num=5):    countRight,data=0,readData(fileIn)    for k in data:        if judgeSpot2(data,k,num)==data[k]:            countRight+=1    return countRight/float(len(open(fileIn).readlines()))print(rateRight())

#版本1:numpy版 (待實現)




搜尋

複製

<Python><有監督>kNN--近鄰分類演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.