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
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
]])
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。工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,且樣本集中每個資料都存在標籤,知道樣本集中與所屬分類的對應關係。輸入沒有定義的新資料後,將新資料的每個...