knn(k-nearest neighbor)是乙個簡單而經典的機器學習分類演算法,通過度量」待分類資料」和」類別已知的樣本」的距離(通常是歐氏距離)對樣本進行分類。
這話說得有些繞口,且來分解一番:
(1)分類問題都是監督(supervised)問題,也就是說一定數量的樣本類別是已知的。
(2)既然我們已經有了一批分好類的樣本,那麼接下來的工作自然應該是通過已知樣本訓練分類器(通過調節分類器的引數,使分類器能夠正確對訓練樣本分類),把分類器訓練好以後用於對未知樣本的分類(或類別**)。
看上去就是這麼回事,問題的關鍵在於分類器的訓練。
但對於knn分類器來說,事情並不是這個樣子的。其實knn並沒有這麼複雜。因為knn並沒有什麼引數要調,換句話說,knn其實並不需要訓練!
作為最簡單也最好理解的分類器,knn只是假設資料都分布在歐式的特徵空間內(以特徵值為座標區分不同樣本的空間),然後我們恰好又知道全部資料在這個空間中的位置以及其中一部分資料的類別。那麼現在我們怎麼判斷剩餘那些資料的類別呢?
為了讓分類進行下去,這裡其實我們假設:空間中距離越近的點屬於一類的可能性越大。
有了這條「公理」,那事情就好辦多了。我們只需要計算每個待分類資料到全部已知類別資料的距離就好了。如圖:
有正方形和三角形兩個已知類,假如中間的圓形我們不知道它到底是三角形還是正方形。按照上面說的,我們可以正兒八經計算一下它到其他所有點的距離。在這裡為了簡便,我們目測一下發現它離旁邊的三角形最近,好嘞,那麼我們就把它歸為三角形一類的。
注意這裡我們把未知點和離它最近的那乙個點歸為一類。這樣的分類器,準確來說叫最近鄰分類器(nearest-neighbor,nn)。這是knn的特殊情況,是k=1的情況。
那麼k近鄰,顧名思義,就是要乙個未知點參考離它最近的前k個一直類別的點,看在這k個點裡面,屬於哪個類別的點最多,就認為未知點屬於哪一類。還是上面的圖,以圓形未知點為圓心,在實線畫出的圓中,相當於k=3,也就是選了前三個離得最近的點,其中三角形2個,方形1個,所以未知點歸到三角形一類。但是當考慮虛線範圍內時,也就是k=5時,我們發現方形3個,三角形2個,所以這個時候未知點歸到方形一類了。
所以我們可以發現,不同的最近鄰個數往往會導致不同的分類結果,一般來說,我們在實際應用中要根據實際情況和經驗確定k的取值。
演算法流程
對每乙個未知點執行:
計算未知點到所有已知類別點的距離
按距離排序(公升序)
選取其中前k個與未知點離得最近的點
統計k個點中各個類別的個數
上述k個點裡類別出現頻率最高的作為未知點的類別
優缺點
優點:
簡單有效、易理解
缺點:
k近鄰需要儲存全部資料集,因此對記憶體消耗大,當資料集較大時對裝置要求非常高;
需要計算每個未知點到全部已知點的距離,可能會很耗時;
分類結果不易理解
KNN演算法簡介
假設乙個樣本空間裡的樣本分成幾個型別 1 然後給定乙個待分類的資料,通過計算距離該資料最近的k個樣本來判斷這個待分類資料屬於哪個分類。簡單的說,就是由那些裡自己最近的k個樣本點投票決定待分類資料歸為哪一類。下圖中有兩種型別的樣本資料,一類是藍色的正方形,另一類是紅色的三角形,中間那個綠色的圓形是待分...
文字分類演算法之 KNN演算法的簡介
1 knn演算法的簡介 knn演算法就是找到k個最相似的樣本,這些樣本所在的類,就是當前文件的所屬的類。如下圖 綠色圓圈表示你想分類的文字,其他是已知類別的樣本。圖中其他形狀和綠色圓圈的距離代表了相似度。如果k 3,就是取3個最相似的文字,那麼1個藍色框,2紅色三角被選中,因為紅色三角多,則綠色圓圈...
KNN演算法 鄰近演算法
knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...