資料探勘演算法 KNN學習

2021-08-04 15:10:51 字數 1277 閱讀 3005

knn(k-nearest-neighbour)是資料探勘領域的基本演算法之一,原理比較簡單,在各類別均衡、樣本容量比較大的情況下比較實用。

演算法以樣本間的距離作為相似性測度。在同一測量空間中以測試樣本為中心,檢測一定範圍內的k個樣本類別,用「投票法」得出測試樣本的類別。

#設k為離測試樣本最近的樣本數,d為資料集

for 資料集中的每條資料 do

計算其餘所有點與樣本點距離

對距離從小到大排序,取前k個

計算k個樣本中出現最多的類別,將它賦給測試樣本

endfor

有必要關注的地方有三點:

距離的量度

歐式距離很常用,但是它忽略了量綱的影響。兩點之間的歐式距離與測量單位有關,所以當不同分量的量綱不同時需要進行標準化處理。

明氏距離是對歐式距離的擴充套件,當p=2時二者相同。

馬氏距離考慮了量綱的影響,據此得出的距離與測量單位無關。

根據實際情況可以針對不同類別樣本對測試樣本距離的影響賦予不同的權值,這樣可以減少錯誤率。對於文字資料探勘,常用夾角余弦作為相似性測度。

k的取值

因為樣本類別由k個樣本決定,所以k的取值在演算法中顯得十分重要。當k較小時樣本點太少,容易受到雜訊的影響。當k較大時分類精度會下降,錯分的概率上公升。

根據經驗,k低於訓練樣本數的平方根。

效率 由於需要對每乙個點進行全資料集的檢索,本演算法的效率比較低,k越大,資料量越大越是如此。當然在一些比如說資料集是乙個稀疏矩陣的情況下可以改進資料儲存演算法,相對於暴力求解距離,可以採用kd樹或者ball樹來改進提高檢索效率。

該演算法屬於消極學習法,是基於例項的學習。優點在於易於理解,無需建模。缺點在於花費較大,不像決策樹那樣可解釋性不強。

下面是用r的簡單實現,採用暴力求解:

#knn

#x is train data,k is the number of neighbors

#return the labels of testdata

knn

distance

for(g in seq(k))

label

distance

} label

}

【歐式距離與馬氏距離區別】

【模式識別相似性測度距離】

《資料探勘導論》

【kd樹演算法思路】

資料探勘學習札記 KNN演算法(一)

參考 1.knn演算法介紹,python程式和乙個簡單算例 2.k nearest neighbor algorithm 基本想法 在距離空間裡,如果乙個樣本的最接近的k個鄰居裡,絕大多數屬於某個類別,則該樣本也屬於這個類別。俗話叫,隨大流 演算法描述 plain view plain copy 1...

資料探勘 分類演算法 KNN

knn k nearest neighbors k近鄰分類演算法 knn演算法從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。knn分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表...

資料探勘演算法筆記 knn演算法

前幾篇的總結居然格式錯誤,找時間重新整理。一調包import numpy as npfrom sklearn.neighbors import kneighborsclassifierknn kneighborsclassifier data np.array 3,104 2,100 1,81 10...