上圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果k=3,由於紅色三角形所佔比例為2/3,綠色圓將被賦予紅色三角形那個類,如果k=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。
k最近鄰(k-nearest neighbor,knn)分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。 knn方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。
knn演算法不僅可以用於分類,還可以用於回歸。通過找出乙個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成反比。
在knn中,通過計算物件間距離來作為各個物件之間的非相似性指標,避免了物件之間的匹配問題,在這裡距離一般使用歐氏距離或曼哈頓距離:
同時,knn通過依據k個物件中佔優的類別進行決策,而不是單一的物件類別決策。這兩點就是knn演算法的優勢。
接下來對knn演算法的思想總結一下:就是在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料中出現次數最多的那個分類,其演算法的描述為:
1)計算測試資料與各個訓練資料之間的距離;
2)按照距離的遞增關係進行排序;
3)選取距離最小的k個點;
4)確定前k個點所在類別的出現頻率;
5)返回前k個點中出現頻率最高的類別作為測試資料的**分類。
# coding=utf-8
'''1)計算測試資料與各個訓練資料之間的距離;
2)按照距離的遞增關係進行排序;
3)選取距離最小的k個點;
4)確定前k個點所在類別的出現頻率;
5)返回前k個點中出現頻率最高的類別作為測試資料的**分類。
'''import numpy as np
##給出訓練資料以及對應的類別
defcreatedataset
(): group = np.array([[1.0,2.0],[1.2,0.1],[0.1,1.4],[0.3,3.5]])
labels = ['a','a','b','b']
return group,labels
###通過knn進行分類
defclassify
(input,dataset,label,k):
datasize = dataset.shape[0]
# 計算歐式距離
dis = np.zeros( datasize , dtype=float)
for i in range( datasize ):
dis[i] = np.linalg.norm( (input - dataset[i])*(input - dataset[i]).t )
# 對距離排序
sortedindex = np.argsort(dis)
# 累計label次數
classcount = {}
for i in range(k):
vote = labels[sortedindex[i]]
classcount[vote] = classcount.get(vote,0)+1
# 對map的value排序
sortedclass = sorted(classcount.items(),lambda x,y: cmp(x[1] , y[1]),reverse=true)
return sortedclass[0][0]
dataset, labels = createdataset()
input = np.array([1.1, 0.3])
k = 3
output = classify(input, dataset, labels, k)
print
"測試資料為:", input, "分類結果為:", output
output:
測試資料為: [ 1.1 0.3] 分類結果為: a
機器學習演算法 KNN近鄰演算法
在研究機器學習演算法之前,先明確一些基本的概念 1 資料特徵 用於描述一條資料的一些特徵屬性,例如描述乙個人,可以用身高,體重,姓名的屬性來表述,這些資料就是資料的特徵。2 資料類別 根據資料的特徵進行明確的分類。比如說身高1.7,體重60kg的這個人是小明。不滿足上面這些特徵的人不是小明。那麼 是...
機器學習 k 近鄰 kNN 演算法
一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...
機器學習 k近鄰演算法 kNN
knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...