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

2021-07-12 02:50:06 字數 2095 閱讀 9360

參考:

1. knn演算法介紹,python程式和乙個簡單算例

2. k-nearest neighbor algorithm

基本想法:

在距離空間裡,如果乙個樣本的最接近的k個鄰居裡,絕大多數屬於某個類別,則該樣本也屬於這個類別。俗話叫,「隨大流」。

演算法描述:

[plain]view plain

copy

1. 依公式計算 item 與 d1、d2 … …、dj 之相似度。得到sim(item, d1)、sim(item, d2)… …、sim(item, dj)。  

2. 將sim(item, d1)、sim(item, d2)… …、sim(item, dj)排序,若是超過相似度閾值t則放入鄰居案例集合nn。  

3. 自鄰居案例集合nn中取出前k名,依多數決,得到item可能類別。  

引數k的選取:

如何選擇乙個最佳的k值取決於資料。一般情況下,在分類時較大的k值能夠減小雜訊的影響。但會使類別之間的界限變得模糊。比如下圖,

待測樣本(綠色圓圈)既可能分到紅色三角形類,也可能分到藍色正方形類。如果k取3,從圖可見,待測樣本的3個鄰居在實線的內圓裡,按多數投票結果,它屬於紅色三角形類,票數1:2.但是如果k取5,那麼待測樣本的最鄰近的5個樣本在虛線的圓裡,按表決法,它又屬於藍色正方形類,票數2(紅色三角形):3(藍色正方形)。

其它問題:

計算兩者間距離,用哪種距離會更好呢?計算量太大怎麼辦?假設樣本中,型別分布非常不均,該怎麼辦呢?

例子(電影分類):

電影名稱

打鬥次數

接吻次數

電影型別

california man 

3104romance

he』s not really into dudes 

2100romance

beautiful woman 

181romance

kevin longblade 

10110action

robo slayer 3000 

995action

amped ii 

982action

未知18

90unknown

這個資料用打鬥次數和接吻次數來界定電影型別,接吻多的是romance型別的,而打鬥多的是動作電影。現在有一部名字未知的電影,打鬥次數為18次,接吻次數為90次的電影(這裡名字未知是為了防止能從名字中猜出電影型別),它到底屬於哪種型別的電影呢?

下面呼叫python的sklearn模組求解:(**knn演算法介紹)

[python]view plain

copy

import

numpy as np  

from

sklearn 

import

neighbors  

knn = neighbors.kneighborsclassifier() #取得knn分類器

data = np.array([[3

,104

],[2

,100

],[1,81

],[101,10

],[99,5

],[98,2

]]) 

# data對應著打鬥次數和接吻次數

labels = np.array([1,1

,1,2

,2,2

]) #labels則是對應romance和action

knn.fit(data,labels) #匯入資料進行訓練'''

knn.predict([18,90

])  

說明:首先,用labels陣列中的1和2代表romance和aciton,因為sklearn不接受字元陣列作為標誌,只能用1,2這樣的int型資料來表示,後面處理可以將1和2對映到romance和action上來。fit則是用data和labels進行訓練,data對應的是打鬥次數和接吻次數構成的向量,稱之為特徵向量。labels則是這個資料所代表的電影所屬的型別。呼叫predict 進行**,將未知電影的特徵向量代入,則能分析出該未知電影所屬的型別。此處計算結果為1,也就是該未知電影屬於romance,和直覺相符。

資料探勘演算法 KNN學習

knn k nearest neighbour 是資料探勘領域的基本演算法之一,原理比較簡單,在各類別均衡 樣本容量比較大的情況下比較實用。演算法以樣本間的距離作為相似性測度。在同一測量空間中以測試樣本為中心,檢測一定範圍內的k個樣本類別,用 投票法 得出測試樣本的類別。設k為離測試樣本最近的樣本數...

資料探勘 分類演算法 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...