機器學習-- 入門demo1 k臨近算法

一、k-近鄰法簡介

 

k近鄰法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一種基本分類與迴歸方法。html

它的工做原理是:存在一個樣本數據集合,也稱做爲訓練樣本集,而且樣本集中每一個數據都存在標籤,即咱們知道樣本集中每個數據與所屬分類的對應關係。算法

輸入沒有標籤的新數據後,將新的數據的每一個特徵與樣本集中數據對應的特徵進行比較,而後算法提取樣本最類似數據(最近鄰)的分類標籤。ui

通常來講,咱們只選擇樣本數據集中前k個最類似的數據,這就是k-近鄰算法中k的出處,一般k是不大於20的整數。spa

最後,選擇k個最類似數據中出現次數最多的分類,做爲新數據的分類。.net

 

 

 

二、距離度量

咱們已經知道k-近鄰算法根據特徵比較,而後提取樣本集中特徵最類似數據(最鄰近)的分類標籤。3d

那麼,如何進行比較呢?好比,咱們仍是以表1.1爲例,怎麼判斷紅色圓點標記的電影所屬的類別呢? 以下圖所示。rest

 

 

 

咱們能夠從散點圖大體推斷,這個紅色圓點標記的電影可能屬於動做片,由於距離已知的那兩個動做片的圓點更近。code

k-近鄰算法用什麼方法進行判斷呢?沒錯,就是距離度量。這個電影分類的例子有2個特徵,也就是在2維實數向量空間,htm

可使用咱們高中學過的兩點距離公式計算距離,如圖1.2所示。blog

 

 

 

 

經過計算可知,紅色圓點標記的電影到動做片 (108,5)的距離最近,爲16.55。

若是算法直接根據這個結果,判斷該紅色圓點標記的電影爲動做片,這個算法就是最近鄰算法,

而非k-近鄰算法。那麼k-近鄰算法是什麼呢?k-近鄰算法步驟以下:

  1. 計算已知類別數據集中的點與當前點之間的距離;
  2. 按照距離遞增次序排序;
  3. 選取與當前點距離最小的k個點;
  4. 肯定前k個點所在類別的出現頻率;
  5. 返回前k個點所出現頻率最高的類別做爲當前點的預測分類。

好比,如今我這個k值取3,那麼在電影例子中,按距離依次排序的三個點分別是動做片(108,5)、動做片(115,8)、愛情片(5,89)。

在這三個點中,動做片出現的頻率爲三分之二,愛情片出現的頻率爲三分之一,因此該紅色圓點標記的電影爲動做片。這個判別過程就是k-近鄰算法。

 

 

 

 

三、Python3代碼實現

 

(1) 準備數據集合

 

對於表1.1中的數據,咱們可使用numpy直接建立,代碼以下:

 

 結果以下

 

 

(2)k-近鄰算法

根據兩點距離公式,計算距離,選擇距離最小的前k個點,並返回分類結果。

 

輸出結果:

group [[  1 101]
 [  5  89]
 [108   5]
 [115   8]]
labels ['愛情片', '愛情片', '動做片', '動做片']
datasetsize 4
diffmat  [[100 -81]
 [ 96 -69]
 [ -7  15]
 [-14  12]]
sqdiffmat [[10000  6561]
 [ 9216  4761]
 [   49   225]
 [  196   144]]
sqdistances [16561 13977   274   340]
distances [ 128.68954892  118.22436297   16.55294536   18.43908891]
sortedDistIndices [2 3 1 0]
 voteIlabel 0 動做片
classCount[voteIlabel]  1
 voteIlabel 1 動做片
classCount[voteIlabel]  2
 voteIlabel 2 愛情片
classCount[voteIlabel]  1
sortedClassCount [('動做片', 2), ('愛情片', 1)]
動做片

 

 

由 模型可知, 當數據爲[101,20]  ,數據數據可能爲動做片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考資料

https://cuijiahua.com/blog/2017/11/ml_1_knn.html

https://www.cnblogs.com/bonelee/p/8036024.html

https://blog.csdn.net/u011475210/article/details/77770751

相關文章
相關標籤/搜索