KNN演算法 鄰近演算法

2021-06-21 06:59:15 字數 2487 閱讀 9974

knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單:計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下:

電影名稱

打鬥次數

接吻次數

電影型別

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次的電影,它到底屬於哪種型別的電影呢?

knn演算法要做的,就是先用打鬥次數和接吻次數作為電影的座標,然後計算其他六部電影與未知電影之間的距離,取得前k個距離最近的電影,然後統計這k個距離最近的電影裡,屬於哪種型別的電影最多,比如action最多,則說明未知的這部電影屬於動作片型別。

在實際使用中,有幾個問題是值得注意的:k值的選取,選多大合適呢?計算兩者間距離,用哪種距離會更好呢(歐幾里得距離等等幾個)?計算量太大怎麼辦?假設樣本中,型別分布非常不均,比如action的電影有200部,但是romance的電影只有20部,這樣計算起來,即使不是action的電影,也會因為action的樣本太多,導致k個最近鄰居裡有不少action的電影,這樣該怎麼辦呢?

沒有萬能的演算法,只有在一定使用環境中最優的演算法,所以,要懂得合適利用演算法。

1

2

3

4

5

6

7

importnumpy as np

fromsklearnimportneighbors

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

data=np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])

labels=np.array([1,1,1,2,2,2])

knn.fit(data,labels)#匯入資料進行訓練,data對應著打鬥次數和接吻次數,而labels則是對應romance和action,因為這裡只能接受整數型別的陣列

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演算法(鄰近演算法)

鄰近演算法 或者說k最近鄰 knn,k nearestneighbor 分類演算法是 資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn演算法的核心思想 是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類...

演算法 K NN鄰近演算法

關注公zhong號 落葉歸根的豬。獲取資源,交個朋友 k nearest neighbors 1.基本概念與原理 k近鄰演算法是一種基本分類和回歸方法。knn演算法非常簡單且非常有效。knn的模型表示是整個訓練資料集。該演算法的思想是 乙個樣本與資料集中的k個樣本最相似,如果這k個樣本中的大多數屬於...

knn鄰近演算法

knn演算法即為k鄰近演算法,是一種監督式的機器學習演算法,且它是用來進行分類的。注意此演算法需要和 k means演算法進行區別,因為都有個k。工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,且樣本集中每個資料都存在標籤,知道樣本集中與所屬分類的對應關係。輸入沒有定義的新資料後,將新資料的每個...