深入淺出KNN演算法(一) 介紹篇

2021-09-16 13:49:06 字數 2277 閱讀 6158

knn可以說是最簡單的分類演算法之一,同時,它也是最常用的分類演算法之一,注意knn演算法是有監督學習中的分類演算法,它看起來和另乙個機器學習演算法kmeans有點像(kmeans是無監督學習演算法),但卻是有本質區別的。那麼什麼是knn演算法呢,接下來我們就來介紹介紹吧。

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

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

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

明白了大概原理後,我們就來說一說細節的東西吧,主要有兩個,k值的選取點距離的計算

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

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

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

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

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

所以選擇k點的時候可以選擇乙個較大的臨界k點,當它繼續增大或減小的時候,錯誤率都會上公升,比如圖中的k=10。具體如何得出k最佳值的**,下一節的**例項中會介紹。

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

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

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

了解knn演算法的優勢和劣勢,可以幫助我們在選擇學習演算法的時候做出更加明智的決定。那我們就來看看knn演算法都有哪些優勢以及其缺陷所在!

knn演算法優點

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

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

**效果好。

對異常值不敏感

knn演算法缺點

對記憶體要求較高,因為該演算法儲存了所有訓練資料

**階段可能很慢

對不相關的功能和資料規模敏感

至於什麼時候應該選擇使用knn演算法,sklearn的這張圖給了我們乙個答案。

簡單得說,當需要使用分類演算法,且資料比較大的時候就可以嘗試使用knn演算法進行分類了。

ok,本次先對knn演算法做乙個介紹,下一節解析sklearn的引數,以及k值選取。

深入淺出KNN演算法 一 KNN演算法原理

knn可以說是最簡單的分類演算法之一,同時,它也是最常用的分類演算法之一,注意knn演算法是有監督學習中的分類演算法,它看起來和另乙個機器學習演算法kmeans有點像 kmeans是無監督學習演算法 但卻是有本質區別的。那麼什麼是knn演算法呢,接下來我們就來介紹介紹吧。knn的全稱是k neare...

OpenCV學習教程入門篇 一 介紹

opencv,是inter公司開發的免費開源專門因為影象處理和機器視覺的c c 庫,英文全稱是open source computer vision。1.視覺化語言matlab與opencv都能夠用於影象處理,學哪種比較好?matlab是主要面對高校做科研的一種視覺化數學處理工具箱。opencv在有...

深入淺出線性回歸演算法(一)線性回歸初步介紹

相信大家都聽過著名的博物學家,達爾文的大名,而今天這個故事的主人公就是他的表弟高爾頓。高爾頓是一名生理學家,在1995年的時候,他研究了1078對父子的身高,發現他們大致滿足一條公式,那就是 y 0.8567 0.516 x 這條式子中的x指的是父親的身高,y指的是兒子的身高。可以明顯看出,這就是我...