knn演算法原理
knn(k-nearest neighbor)最鄰近分類演算法是資料探勘分類(classification)技術中最簡單的演算法之一,其指導思想是」近朱者赤,近墨者黑「,即由你的鄰居來推斷出你的類別。
knn最鄰近分類演算法的實現原理:為了判斷未知樣本的類別,以所有已知類別的樣本作為參照,計算未知樣本與所有已知樣本的距離,從中選取與未知樣本距離最近的k個已知樣本,根據少數服從多數的投票法則(majority-voting),將未知樣本與k個最鄰近樣本中所屬類別佔比較多的歸為一類。
python實現knn演算法
1view codeimport
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)
機器學習演算法 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 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...