wikipedia上的 knn詞條 中有乙個比較經典的圖如下:
knn的演算法過程是是這樣的:
從上圖中我們可以看到,圖中的資料集是良好的資料,即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是我們待分類的資料。
如果k=3,那麼離綠色點最近的有2個紅色三角形和1個藍色的正方形,這3個點投票,於是綠色的這個待分類點屬於紅色的三角形。
如果k=5,那麼離綠色點最近的有2個紅色三角形和3個藍色的正方形,這5個點投票,於是綠色的這個待分類點屬於藍色的正方形。(參考 酷殼的 k nearest neighbor 演算法 )
我們可以看到,knn本質是基於一種資料統計的方法!其實很多機器學習演算法也是基於資料統計的。
knn是一種memory-based learning,也叫instance-based learning,屬於lazy learning。即它沒有明顯的前期訓練過程,而是程式開始執行時,把資料集載入到記憶體後,不需要進行訓練,就可以開始分類了。
具體是每次來乙個未知的樣本點,就在附近找k個最近的點進行投票。
再舉乙個例子,locally weighted regression (lwr)也是一種 memory-based 方法,如下圖所示的資料集。
用任何一條直線來模擬這個資料集都是不行的,因為這個資料集看起來不像是一條直線。但是每個區域性範圍內的資料點,可以認為在一條直線上。每次來了乙個位置樣本x,我們在x軸上以該資料樣本為中心,左右各找幾個點,把這幾個樣本點進行線性回歸,算出一條區域性的直線,然後把位置樣本x代入這條直線,就算出了對應的y,完成了一次線性回歸。
也就是每次來乙個資料點,都要訓練一條區域性直線,也即訓練一次,就用一次。
lwr和knn是不是很像?都是為位置資料量身定製,在區域性進行訓練。
如圖所示,資料樣本用圓點表示,每個簇的中心點用叉叉表示。(a)剛開始時是原始資料,雜亂無章,沒有label,看起來都一樣,都是綠色的。(b)假設資料集可以分為兩類,令k=2,隨機在座標上選兩個點,作為兩個類的中心點。(c-f)演示了聚類的兩種迭代。先劃分,把每個資料樣本劃分到最近的中心點那一簇;劃分完後,更新每個簇的中心,即把該簇的所有資料點的座標加起來去平均值。這樣不斷進行」劃分—更新—劃分—更新」,直到每個簇的中心不在移動為止。(**來自andrew ng的機器學習公開課)。
推薦關於k-means的兩篇博文, k-means 演算法 _ 酷殼 , 漫談 clustering (1)_ k-means pluskid 。
knn
k-means
1.knn是分類演算法
2.監督學習
3.餵給它的資料集是帶label的資料,已經是完全正確的資料
1.k-means是聚類演算法
2.非監督學習
3.餵給它的資料集是無label的資料,是雜亂無章的,經過聚類後才變得有點順序,先無序,後有序
沒有明顯的前期訓練過程,屬於memory-based learning
有明顯的前期訓練過程
k的含義:來了乙個樣本x,要給它分類,即求出它的y,就從資料集中,在x附近找離它最近的k個資料點,這k個資料點,類別c佔的個數最多,就把x的label設為c
k的含義:k是人工固定好的數字,假設資料集合可以分為k個簇,由於是依靠人工定好,需要一點先驗知識
相似點:都包含這樣的過程,給定乙個點,在資料集中找離它最近的點。即二者都用到了nn(nears neighbor)演算法,一般用kd樹來實現nn。
KNN與K Means的區別
from wikipedia上的 knn詞條 中有乙個比較經典的圖如下 knn的演算法過程是是這樣的 從上圖中我們可以看到,圖中的資料集是良好的資料,即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是我們待分類的資料。如果k 3,那麼離綠色點最近的有2個紅色三角形和1個藍...
KNN與K Means的區別
wikipedia上的 knn詞條 中有乙個比較經典的圖如下 knn的演算法過程是是這樣的 從上圖中我們可以看到,圖中的資料集是良好的資料,即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是我們待分類的資料。如果k 3,那麼離綠色點最近的有2個紅色三角形和1個藍色的正方形...
KNN與K Means的區別
wikipedia上的 knn詞條 中有乙個比較經典的圖如下 knn的演算法過程是是這樣的 從上圖中我們可以看到,圖中的資料集是良好的資料,即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是我們待分類的資料。如果k 3,那麼離綠色點最近的有2個紅色三角形和1個藍色的正方形...