機器學習KNN演算法基本原理與python實現

2021-09-27 11:45:01 字數 2469 閱讀 8126

k-近鄰演算法(k-nearest neighbour algorithm),又稱為knn演算法,是資料探勘技術中原理最簡單的演算法。knn

的工作原理:給定乙個已知標籤類別的訓練資料集,輸入沒有標籤的新資料後,在訓練資料集中找到與新資料最鄰

近的k個例項,如果這k個例項的多數屬於某個類別,那麼新資料就屬於這個類別。可以簡單理解為:由那些離x最

近的k個點來投票決定x歸為哪一類

簡單來說,乙個待分類的樣本資料,在使用knn演算法的時候,根據自己訓練樣本的資料特徵,選取k的值至關重要,當然k的取值是人為定義好的,通常不超過20.  舉個例子,如果有6個訓練資料,分別是a,a,a,b,b,b,有乙個待測樣本資料c,根據knn演算法,需要**資料c進行歸類,如果選取的k=1,那麼離待測樣本資料最近的乙個點的歸類,比如是b,那麼待測樣本資料c就歸屬於b類,同理,如果選取的k=5,那麼離c最近的5個點,有a,a,a,b,b,那麼c就資料a類,

上面也提到過,knn演算法,選取k的值不同,離待測樣本資料距離最近點的不同,得到的結果也就不同.因此距離的計算尤其重要,在二維平面中,距離的計算公式為,

當有多個特徵拓展到n維的空間當中,我們可以使用歐幾里得度量(歐氏距離)來得到他們之間的距離,距離計算公式如下:

其中舉個例子    a(x1,x2,x3),b   (y1,y2,y3)

那麼他們之間的歐式距離是

皮爾遜相關係數

在歐式距離的計算中,不同特徵之間的量級對歐式距離的影響比較大,例如a=(0.05,1),b=(1,1),c=(0.05,4),我們就不能很好的判斷出a和b,a和c 之間的距離,而皮爾遜相似性的度量對量級則可以,其公式如下:

其中表示向量x和向量y的內積,||x||表示向量x的二範數

(1)計算已知類別資料集中的點與當前點之間的距離;

(2)按照距離遞增次排序;

(3)選取與當前點距離最小的k個點

(4)確定前k個點所在類別的出現頻率

(5)返回前k個點出現頻率最高的類別作為當前點的**類別

本人使用的編譯器jupyter notbook 

第一步 :構建資料集,為了方便驗證,這裡使用python字典dict構建資料集,並將其轉化為dataframe形式

第二步:計算已知類別資料集中的點與當前點之間的距離

第三步:將距離公升序排列,然後選取距離最小的k個點

第四步:確定前k個點所在類別出現的頻率

第五步:選取頻率最高的類別作為當前點的**類別

完整的流程已經實現,需要把函式進行封裝,方便後期的呼叫

上述就是我們使用k近鄰演算法構建的分類器,但是分類器的給出的結果並不是百分百正確,我們也可以通過很多方法來驗證分類器給出的結果是否是正確的,分類器結果的效能也會受到很多因素的影響,比如k的取值很大程度上影響分類器的結果,還有分類器的設定,原始資料集等等一系列因素,我們把原始資料分為訓練集和測試集,上述**發現乙個問題,k近鄰演算法沒有進行資料的訓練,直接使用未知的資料和已知資料進行比較,得到結果,所以說。k近鄰演算法沒有顯示的學習過程

資料歸一化的優點 :

1  提高梯度下降法求解最優解的速度  2  歸一化之後也可能提高精確度

在knn演算法中,如果乙個特徵值域範圍非常大,那麼距離計算就主要取決於這個特徵,從而與實際情況相悖(比如這時實際情況是值域範圍小的特徵更重要)

資料歸一化的方式有很多,比如0-1標準化、z-score標準化、sigmoid壓縮法等等,下面介紹下0-1標準化的處理公式:

x:表示當面需要歸一化的數值 

min:表示這個特徵下的最小值

max:表示這個特徵下的最大值

跳蚤演算法 基本原理。

跳蚤演算法 基本原理。一 演算法的誕生及設計初衷。傳統教材中取得x個0 to n之間不重複隨機數的方法一般是這樣 x個不重複隨機數輸出到a 陣列 for i 1 to x dor int rnd n 1 c 確定r不包含在a 內 loop until c 將r新增到a next 由於r可能與a 內的...

RSA演算法基本原理

圖為 rsa公開金鑰演算法的發明人,從左到右ron rivest,adi shamir,leonard adleman.攝於1978年 素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也...

ARA 演算法的基本原理

在介紹ara 演算法之前,有必要介紹一下weighted a 演算法,在最初的a 演算法中,f s 的計算方法為 f g h可以看出f s 是由個g s 和h s 兩項構成的,其中g s 是乙個後驗值,而h s 是乙個先驗值,這樣一種啟發式的搜尋方式本身為演算法本身節省了很多資源,去除了一些不必要點...