knn算法例題經典:k近鄰算法的原理

什麼是K-近鄰算法?

簡單的說,K-近鄰算法就是採用測量不同特徵值之間的距離方法來進行分類。它的工作原理是:存在一個樣本數據集合,也稱作訓練樣本集,並且樣本集中每個數據都存在標籤,即我們知道樣本集中每一數據與所屬分類的對應關係,輸入沒有標籤的新數據之後,將新數據的每個特徵與樣本集中數據對應的特徵進行比較,然後算法提取出樣本集中特徵最相似數據的分類標籤。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是K-近鄰算法名稱的由來。

提問:親,你造K-近鄰算法是屬於監督學習還是無監督學習呢?

使用Python導入數據

從K-近鄰算法的工作原理中我們可以看出,要想實施這個算法來進行數據分類,我們手頭上得需要樣本數據,沒有樣本數據怎麼建立分類函數呢。所以,我們第一步就是導入樣本數據集合。

建立名為kNN.py的模塊,寫入代碼:

from numpy import *

import operator

def createDataSet():

group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

labels = [‘A’,’A’,’B’,’B’]

return group, labels

代碼中,我們需要導入Python的兩個模塊:科學計算包NumPy和運算符模塊。NumPy函數庫是Python開發環境的一個獨立模塊,大多數Python版本里沒有默認安裝NumPy函數庫,因此這裡我們需要單獨安裝這個模塊。大家可以從sourceforge上下載安裝。

使用Python實現K-近鄰(KNN)算法

有很多的版本,這裡我選擇的是
numpy-1.7.0-win32-superpack-python2.7.exe。

實現K-近鄰算法

K-近鄰算法的具體思想如下:

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

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

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

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

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

Python語言實現K-近鄰算法的代碼如下:

使用Python實現K-近鄰(KNN)算法

運算結果如下:

使用Python實現K-近鄰(KNN)算法

輸出結果是B:說明我們新的數據([0,0])是屬於B類。

代碼詳解

相信有很多朋友們對上面這個代碼有很多不理解的地方,接下來,我重點講解幾個此函數的關鍵點,以方便讀者們和我自己回顧一下這個算法代碼。

classify函數的參數:

  • inX:用於分類的輸入向量
  • dataSet:訓練樣本集合
  • labels:標籤向量
  • k:K-近鄰算法中的k

shape:是array的屬性,描述一個多維數組的維度。

tile(inX, (dataSetSize,1)):把inX二維數組化,dataSetSize表示生成數組後的行數,1表示列的倍數。整個這一行代碼表示前一個二維數組矩陣的每一個元素減去後一個數組對應的元素值,這樣就實現了矩陣之間的減法,簡單方便得不讓你佩服不行!

axis=1:參數等於1的時候,表示矩陣中行之間的數的求和,等於0的時候表示列之間數的求和。

argsort():對一個數組進行非降序排序

classCount.get(numOflabel,0) + 1:這一行代碼不得不說的確很精美啊。get():該方法是訪問字典項的方法,即訪問下標鍵為numOflabel的項,如果沒有這一項,那麼初始值為0。然後把這一項的值加1。所以Python中實現這樣的操作就只需要一行代碼,實在是很簡潔高效。

後話

K-近鄰算法(KNN)原理以及代碼實現差不多就這樣了,接下來的任務就是更加熟悉它,爭取達到裸敲的地步。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/224811.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:40
下一篇 2024-12-09 14:40

相關推薦

發表回復

登錄後才能評論