KNN K近鄰 演算法 簡單實現

2021-09-26 03:42:59 字數 2834 閱讀 7609

k近鄰(knn,k-nearestneighbor)分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。cover和hart在2023年提出了最初的鄰近演算法。knn是一種分類(classification)演算法,它輸入基於例項的學習(instance-based learning),屬於懶惰學習(lazy learning)即knn沒有顯式的學習過程,也就是說沒有訓練階段,資料集事先已有了分類和特徵值,待收到新樣本後直接進行處理。與急切學習(eager learning)相對應。

knn是通過測量不同特徵值之間的距離進行分類。

思路是:如果乙個樣本在特徵空間中的k個最鄰近的樣本中的大多數屬於某乙個類別,則該樣本也劃分為這個類別。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。

提到knn,網上最常見的就是下面這個圖,可以幫助大家理解。

我們要確定綠點屬於哪個顏色(紅色或者藍色),要做的就是選出距離目標點距離最近的k個點,看這k個點的大多數顏色是什麼顏色。當k取3的時候,我們可以看出距離最近的三個,分別是紅色、紅色、藍色,因此得到目標點為紅色。

演算法的描述:

1)計算測試資料與各個訓練資料之間的距離;

2)按照距離的遞增關係進行排序;

3)選取距離最小的k個點;

4)確定前k個點所在類別的出現頻率;

5)返回前k個點**現頻率最高的類別作為測試資料的**分類

參考:

import numpy as np

import matplotlib.pyplot as plt

import imageio

data =

##儲存已知資料

undata =

##待處理資料點

cls =

##資料類別 0/1

##計算歐式距離

defdisteuclid

(x,y)

:return np.sqrt(np.

sum(

(x-y)**2

))##隨機生成若干待分類資料 rg位資料值範圍

defgenunknowndata

(n,rg)

:while

len(undata)

p = np.around(np.random.rand(2)

*2*rg,decimals=2)

##隨機生成兩類已知資料

defgenoridata

(n,rg)

:while

len(data)

p = np.around(np.random.rand(2)

*rg,decimals=2)

cls.extend([0

for i in

range

(n)]

)while

len(data)

<

2*n:

p = np.around(np.random.rand(2)

*rg+rg,decimals=2)

cls.extend([1

for i in

range

(n)]

)## knn演算法實現

defknn

(k):

for x in undata:

dis =

##計算未知點x與已知點的距離

for i in

range

(len

(data)):

dis[i]

= disteuclid(x,data[i]

)##找到最近k個點 根據k個點的分類情況決定點x的類別

res=

sorted

(dis.items(

),key=

lambda x:x[1]

)[:k] clsn=

0for

(i,j)

in res:

clsn += cls[i]

if clsn/k>=

0.5:1)

else:0

)

show(

)##展示

defshow()

: color =

['r'

,'g'

,'b'

,'c'

,'y'

,'m'

,'k'

]for i in

range

(len

(data)-1

):mark =

int(cls[i]

) plt.plot(data[i][0

],data[i][1

],color[mark]

+'o'

) mark =

int(cls[

len(data)-1

])plt.plot(data[

len(data)-1

][0]

,data[

len(data)-1

][1]

,color[mark]

+'x'

) plt.show(

) plt.pause(1)

genunknowndata(10,

5)genoridata(5,

5)k=3

show(

)knn(k)

KNN(k 近鄰)演算法簡單實現

knn是通過測量不同特徵值之間的距離進行分類。它的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,其中k通常是不大於20的整數。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣...

TensorFlow實現knn(k近鄰)演算法

首先先介紹一下knn的基本原理 knn是通過計算不同特徵值之間的距離進行分類。整體的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。k通常是不大於20的整數。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策...

KNN k近鄰演算法

現在假如我們已經擁有了一些資料 稱為訓練資料集 ts,並且擁有所有資料的類別名 即每條資料應該歸於哪個類別。當我們要判斷一條不知類別的資料時,首先讓這條資料m和已經擁有的所有的資料ts中的每一條資料進行比較,然後根據比較結果選擇出和m最相似 一般是基於距離 的k條資料 k是個整數,並且通常是小於20...