天天看點

分類算法_knn算法

文章目錄

  • ​​1.KNN算法概述​​
  • ​​2.KNN算法介紹​​
  • ​​2.1距離計算​​
  • ​​2.2 K值選擇​​
  • ​​3.KNN特點​​
  • ​​3.1KNN算法的優勢和劣勢​​

1.KNN算法概述

KNN可以說是最簡單的分類算法之一,同時,它也是最常用的分類算法之一,注意KNN算法是有監督學習中的分類算法,它看起來和另一個機器學習算法Kmeans有點像(Kmeans是無監督學習算法),但卻是有本質差別的。

2.KNN算法介紹

KNN的全稱是K Nearest Neighbors,意思是K個最近的鄰居,從這個名字我們就能看出一些KNN算法的蛛絲馬迹了。K個最近鄰居,毫無疑問,K的取值肯定是至關重要的。那麼最近的鄰居又是怎麼回事呢?其實啊,KNN的原理就是當預測一個新的值x的時候,根據它距離最近的K個點是什麼類别來判斷x屬于哪個類别。聽起來有點繞,還是看看圖吧。

分類算法_knn算法

中綠色的點就是我們要預測的那個點,假設K=3。那麼KNN算法就會找到與它距離最近的三個點(這裡用圓圈把它圈起來了),看看哪種類别多一些,比如這個例子中是藍色三角形多一些,新來的綠色點就歸類到藍三角了。

分類算法_knn算法

但是,當K=5的時候,判定就變成不一樣了。這次變成紅圓多一些,是以新來的綠點被歸類成紅圓。從這個例子中,我們就能看得出K的取值是很重要的。

2.1距離計算

要度量空間中點距離的話,有好幾種度量方式,比如常見的曼哈頓距離計算,歐式距離計算等等。不過通常KNN算法中使用的是歐式距離,這裡隻是簡單說一下,拿二維平面為例,,二維空間兩個點的歐式距離計算公式如下:

分類算法_knn算法

這個高中應該就有接觸到的了,其實就是計算(x1,y1)和(x2,y2)的距離。拓展到多元空間,則公式變成這樣:

分類算法_knn算法

2.2 K值選擇

通過上面那張圖我們知道K的取值比較重要,那麼該如何确定K取多少值好呢?答案是通過交叉驗證(将樣本資料按照一定比例,拆分出訓練用的資料和驗證用的資料,比如6:4拆分出部分訓練資料和驗證資料),從選取一個較小的K值開始,不斷增加K的值,然後計算驗證集合的方差,最終找到一個比較合适的K值。

通過交叉驗證計算方差後你大緻會得到下面這樣的圖

分類算法_knn算法

這個圖其實很好了解,當你增大k的時候,一般錯誤率會先降低,因為有周圍更多的樣本可以借鑒了,分類效果會變好。但注意,和K-means不一樣,當K值更大的時候,錯誤率會更高。這也很好了解,比如說你一共就35個樣本,當你K增大到30的時候,KNN基本上就沒意義了。

3.KNN特點

KNN是一種非參的,惰性的算法模型。什麼是非參,什麼是惰性呢?

非參的意思并不是說這個算法不需要參數,而是意味着這個模型不會對資料做出任何的假設,與之相對的是線性回歸(我們總會假設線性回歸是一條直線)。也就是說KNN建立的模型結構是根據資料來決定的,這也比較符合現實的情況,畢竟在現實中的情況往往與理論上的假設是不相符的。

惰性又是什麼意思呢?想想看,同樣是分類算法,邏輯回歸需要先對資料進行大量訓練(tranning),最後才會得到一個算法模型。而KNN算法卻不需要,它沒有明确的訓練資料的過程,或者說這個過程很快。

3.1KNN算法的優勢和劣勢

KNN算法優點

簡單易用,相比其他算法,KNN算是比較簡潔明了的算法。即使沒有很高的數學基礎也能搞清楚它的原理。

模型訓練時間快,上面說到KNN算法是惰性的,這裡也就不再過多講述。

預測效果好。

對異常值不敏感

繼續閱讀