分類演算法學習(一) KNN演算法的原理及簡單實現

2021-08-20 02:48:55 字數 1988 閱讀 6926

有了這條「公理」,那事情就好辦多了。我們只需要計算每個待分類資料到全部已知類別資料的距離就好了。如圖: 

有正方形和三角形兩個已知類,假如中間的圓形我們不知道它到底是三角形還是正方形。按照上面說的,我們可以正兒八經計算一下它到其他所有點的距離。在這裡為了簡便,我們目測一下發現它離旁邊的三角形最近,好嘞,那麼我們就把它歸為三角形一類的。 

注意這裡我們把未知點和離它最近的那乙個點歸為一類。這樣的分類器,準確來說叫最近鄰分類器(nearest-neighbor,nn)。這是knn的特殊情況,是k=1的情況。 

那麼k近鄰,顧名思義,就是要乙個未知點參考離它最近的前k個一直類別的點,看在這k個點裡面,屬於哪個類別的點最多,就認為未知點屬於哪一類。還是上面的圖,以圓形未知點為圓心,在實線畫出的圓中,相當於k=3,也就是選了前三個離得最近的點,其中三角形2個,方形1個,所以未知點歸到三角形一類。但是當考慮虛線範圍內時,也就是k=5時,我們發現方形3個,三角形2個,所以這個時候未知點歸到方形一類了。 

所以我們可以發現,不同的最近鄰個數往往會導致不同的分類結果,一般來說,我們在實際應用中要根據實際情況和經驗確定k的取值。

對每乙個未知點執行:

按距離排序(公升序)

選取其中前k個與未知點離得最近的點

統計k個點中各個類別的個數

上述k個點裡類別出現頻率最高的作為未知點的類別

缺點: 

k近鄰需要儲存全部資料集,因此對記憶體消耗大,當資料集較大時對裝置要求非常高; 

需要計算每個未知點到全部已知點的距離,可能會很耗時; 

分類結果不易理解

原理:

如圖已有分類基礎上若新來了點該如何分類?

根據離得最近的點中找最近的k個點以這幾個點的類別(label)進行投票以最後比例確定新的點類別的更大可能性

本質:如果兩個樣本足夠的相似的話他們就有更高的可能性屬於同一類別

實現:例如圖示為腫瘤時間與大小對於腫瘤的分類的影響,藍色為惡性腫瘤,紅色為良性腫瘤,當新來乙個資料時(綠色資料點)如何判斷它的類別?

程式設計實現**:

knn實現過程

#求**點到最近k個點的距離然後投票

尤拉距離定義

從距離陣列中獲得最近的k個點,如果將x排序,與y則不對應,此處想獲得的是索引,所以可以用argsort方法進行排序獲得其索引找到最近的k個點在哪

python的collection.counter很好的支援投票結果的選取

獲得投票結果為1所以y的**結果為1

文章標籤:

knn分類演算法

個人分類:

mechine learning之knn

機器學習分類演算法(一)k NN分類演算法

k kk nn分類器是最簡單的機器學習分類演算法之一,它的基本思想是 從訓練樣本集中找出與測試樣本 距離 最近的k個樣本作為此測試樣本的 鄰居 然後根據這k個樣本的類別基於一定規則進行投票表決,最高的決定為測試樣本的 類別。用乙個詞來說就是 近朱者赤近墨者黑 由以上所述可以得知,k近鄰分類演算法主要...

KNN演算法學習

knn演算法,我的理解是在有標籤的訓練樣本分佈中,有n個需要測試的樣本,通過尤拉距離 通過計算每個測試樣本得出離訓練最近的k個樣本,同過k個樣本中某一類標籤所佔的比例最高,則將該測試值 為該標籤。import numpy as np from math import sqrt from collec...

knn演算法學習

k近鄰近鄰演算法 多數表決規則等價於經驗風險最小化 損失函式最小化 一訓練資料為基礎,通過此類分類規則計算得到 一塊區域,有k個訓練資料,1,2,3個類別。1 2 3 當此區域判為1,損失函式等於2,3個數和 當此區域判為2,損失函式等於1,3個數和 當此區域判為3,損失函式為1,2個數和 選取損失...