k-近鄰演算法(k-nearest neighbour algorithm),又稱為knn演算法,是資料探勘技術中原理最簡單的演算法。
knn 的工作原理:給定乙個已知標籤類別的訓練資料集,輸入沒有標籤的新資料後,在訓練資料集中找到與新資料最接近的k個例項,如果這k個例項中的多數屬於某個類別,那麼新資料就屬於這個類別。可以簡單理解為:由那些離x最近的k個點來投票決定x歸為哪一類。
舉個簡單的例子,我們可以用k-近鄰演算法分類乙個電影是愛情片還是動作片。
下表記錄了六部影片中的打鬥次數及接吻次數:
電影名稱
打鬥鏡頭
接吻鏡頭
電影型別
無問西東
1101
愛情片後來的我們589
愛情片前任3
1297
愛情片紅海行動
1085
動作片唐人街探案
1129
動作片戰狼2
1158
動作片現在有一部新電影,其中有24個打鬥鏡頭,67個接吻鏡頭。我們可以用k-近鄰演算法來判斷這部電影是屬於愛情片還是動作片。
我們可以將每部電影畫到一張圖上:
如果這裡有是多個特徵擴充套件到n維空間的話,我們可以使用歐氏距離(也稱歐幾里得度量),如下所示:
d is
t(x,
y)=∑
i=1n
(xi−
yi)2
dist(,\bf})= \sqrt^(x_i-y_i)^2}
dist(x
,y)=
i=1∑
n(x
i−y
i)2
通過計算可以得到訓練集中所有電影與未知電影的距離,如下表所示:
電影名稱
與未知電影的距離
無問西東
41.0
後來的我們
29.1
前任332.3
紅海行動
104.4
唐人街探案
105.4
戰狼2108.5
通過上表中的計算結果,我們可以知道綠點標記的電影到愛情片《後來的我們》的距離最近,為29.1。如果僅僅根據這 個結果,判定綠點電影的類別為愛情片,那麼這個演算法叫做最近鄰演算法,而非k-近鄰演算法。k-近鄰演算法步驟如下:
比如,現在假設k=4,那麼在這個電影例子中,把距離按照公升序排列,距離綠點電影最近的前4個的電影分別是《後來的我們》、《前任3》、《無問西東》和《紅海行動》,這四部電影的類別統計為愛情片:動作片=3:1,出現頻率最高的類別為愛情片,所以在k=4時,綠點電影的類別為愛情片。這個判別過程就是k-近鄰演算法。
import pandas as pd
# 1.構建已經分類好的原始資料集
rowdata=
movie_data= pd.dataframe(rowdata)
# 2.計算已知類別資料集中的點與當前點之間的距離
new_data =[24
,67] dist =
list((
((movie_data.iloc[:6
,1:3
]-new_data)**2
).sum(1)
)**0.5)
# sum(1):對列求和
# 3.將距離公升序排列,然後選取距離最小的k個點
dist_l = pd.dataframe(
) dr = dist_l.sort_values(by =
'dist')[
:4]# 4.確定前k個點所在類別的出現頻率
re = dr.loc[:,
'labels'
].value_counts(
)# 5.選擇頻率最高的類別作為當前點的**類別
result =
0])print
(result)
sklearn學習 k近鄰
比如我們要 中心點的顏色,以k 3為半徑畫乙個圓 圖中實線圓 此時紅點多於藍點,那麼我們推測中心點為紅色,以k 5為半徑畫乙個圓 圖中虛線圓 此時藍點多於紅點,那麼我們推測中心點為藍色。鳶尾花種類的 如下 from sklearn import datasets from sklearn.model...
機器學習之K近鄰
k近鄰演算法在機器學習演算法中是最容易理解並且是最容易使用的演算法,下面是機器學習實戰中對k近鄰演算法的注釋。created on sep 16,2010 knn k nearest neighbors input inx vector to compare to existing dataset ...
機器學習之k近鄰
knn演算法假設給定的訓練集中的例項都已經分好類了,對於新的例項,根據離它最近的k個訓練例項的類別來 它的類別。即這k個例項大多數屬於某個類別則該例項就屬於某個類別。比如k為5,離新例項a最近的5個樣本的情況為,3個樣本屬於a類,1個樣本屬於b類,乙個樣本屬於c類,那麼新例項a屬於a類。k值的選取可...