《機器學習實戰》 k近鄰分類演算法kNN

2021-07-11 20:04:50 字數 1884 閱讀 7215

knn全稱為k-nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸:

分類問題的輸出為:找出k個和要**物件最近鄰的樣本,這k個樣本中,「大多數」屬於哪一類即為**物件的分類標籤。

回歸問題的輸出為:找出k個和回歸物件最鄰近的樣本,這k個樣本的標籤的」平均值「即為要回歸物件的標籤。

演算法的訓練樣本為乙個帶有標籤的樣本集合,輸入新的資料後,將新的資料和集合中每個樣本進行對比,找出前k個最鄰近的樣本,這k個最近鄰的樣本中,出現次數最多的標籤即為新資料的標籤(或標籤平均值即為回歸資料的新標籤)。

對於樣本間的「距離」,不同型別資料有不同準則。例如連續資料常常採用歐式距離,二進位制編碼的資料常常採用漢明距離。機器學習中,資料間「距離」度量可以按考漫談:機器學習中距離和相似性度量方法。

對於不同的特徵,量化後的數值大小可能不一樣。如果直接使用量化後的數值,可能會對結果造成影響,為了使不同特徵對結果影響「公平」,要對資料進行歸一化。可以將輸入資料限定的某一範圍,例如[-1, 1]或[0, 1]。例如將資料量化為[0, 1]之間: ne

wval

ue=(

oldv

alue

−min

)/(m

ax−m

in)

如果不對所有特徵「一視同仁」,可以給特徵加權重。

k值得大小直接影響演算法效果。如果k值比較小,相當於只是用了樣本中較少的資料進行了「訓練」,容易產生過擬合,誤差過大。如果k值比較大,相當於和估計資料不相近的樣本也參與了**,造成模型偏差過大。維基百科給出的參考為hyperparameter optimization,其具體例子為交叉驗證。乙個經驗為:k一般低於訓練樣本數的平方根。

1、knn演算法比較簡答, 易於理解,且容易實現。

2、適合多類分類問題。

1、計算量比較大,對於每一次**,都要計算所有樣本的距離。

2、樣本不均衡,**結果不準確。

《機器學習實戰》中給出了python的實現,不同需求,特徵量化、實現不同,但是原理一樣。

inx為輸入資料,dataset為訓練樣本,labels為對應的標籤

def

classify0

(inx, dataset, labels, k):

datasetsize = dataset.shape[0] #樣本大小

diffmat = tile(inx, (datasetsize,1)) - dataset#這裡和下面為計算歐式距離

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

sorteddistindicies = distances.argsort() #argsort(0返回陣列從小到大的索引

classcount={} //用字典來計數標籤個數

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]//找到標籤

classcount[voteilabel] = classcount.get(voteilabel,0) + 1

#標籤個數+1

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)//標籤個數重新排序,並reverse,此時排在最前頭的即為出現次數最多的

return sortedclasscount[0][0]

k-nearest neighbors algorithm

資料探勘十大經典演算法(詳解)

《機器學習實戰》

《機器學習實戰》 K 近鄰演算法

基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...

機器學習實戰 K 近鄰演算法

簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...

機器學習實戰 k 近鄰演算法

本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...