機器學習演算法 KNN演算法

2022-08-30 08:09:10 字數 2324 閱讀 3278

knn演算法原理

knn(k-nearest neighbor)最鄰近分類演算法是資料探勘分類(classification)技術中最簡單的演算法之一,其指導思想是」近朱者赤,近墨者黑「,即由你的鄰居來推斷出你的類別。

knn最鄰近分類演算法的實現原理:為了判斷未知樣本的類別,以所有已知類別的樣本作為參照,計算未知樣本與所有已知樣本的距離,從中選取與未知樣本距離最近的k個已知樣本,根據少數服從多數的投票法則(majority-voting),將未知樣本與k個最鄰近樣本中所屬類別佔比較多的歸為一類。

python實現knn演算法

1

import

numpy as np

2import

operator34

defcreatedataset():5#

四組二維特徵

6   group = np.array([[5,115],[7,106],[56,11],[66,9]])7#

四組對應標籤

8   labels = ('

動作片','

動作片','

愛情片','

愛情片')9

return

group,labels

1011

defclassify(intx,dataset,labels,k):

12'''

13knn演算法

14'''15#

numpy中shape[0]返回陣列的行數,shape[1]返回列數

16   datasetsize =dataset.shape[0]17#

將intx在橫向重複datasetsize次,縱向重複1次18#

例如intx=([1,2])--->([[1,2],[1,2],[1,2],[1,2]])便於後面計算

19   diffmat = np.tile(intx,(datasetsize,1))-dataset20#

二維特徵相減後乘方

21   sqdifmax = diffmat**222#

計算距離

23   seqdistances = sqdifmax.sum(axis=1)

24   distances = seqdistances**0.5

25print ("

distances:

",distances)26#

返回distance中元素從小到大排序後的索引

27   sortdistance =distances.argsort()

28print ("

sortdistance:

",sortdistance)

29   classcount ={}

30for i in

range(k):31#

取出前k個元素的類別

32   votelabel =labels[sortdistance[i]]

33   classcount[votelabel] = classcount.get(votelabel,0)+134#

dict.get(key,default=none),字典的get()方法,返回指定鍵的值,如果值不在字典中返回預設值。35#

reverse降序排序字典

3637

#classcount.iteritems()將classcount字典分解為元組列表,operator.itemgetter(1)按照第二個元素的次序對元組進行排序,reverse=true是逆序,即按照從大到小的順序排列

38   sortedclasscount = sorted(classcount.items(),key = operator.itemgetter(1),reverse =true)39#

結果sortedclasscount = [('動作片', 2), ('愛情片', 1)]

40print ("

sortedclasscount:

",sortedclasscount)

41print("

===>>>%s

",classcount.items())

42return

sortedclasscount[0][0]

43if

__name__ == '

__main__':

44   group,labels =createdataset()

45   test = [20,101]

46   test_class = classify(test,group,labels,3)

47print (test_class)

view code

機器學習演算法 kNN演算法

knn k 鄰近演算法 1.knn是non parametric分類器,既不做分布式假設,直接從資料估計概率密度 2.knn不適用於高維資料 優點 1.無需估計引數,無需訓練 2.特別適合於多分類問題 物件具有多個標籤 缺點 1.當樣本容量不平衡是,輸入有個新樣本,該樣本的k個鄰值中大容量樣本占多數...

機器學習 演算法 KNN

參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...

機器學習 KNN 演算法

一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...