KNN(K臨近演算法)的簡單模擬實現

2021-10-03 22:38:00 字數 2410 閱讀 8757

效果圖:

import math

import matplotlib.pyplot as plt

import numpy as np

defclassifyapoint

(points, p, k=3)

: distance =

# grop裝的的0或1;feature裝的是各個點座標

for group in points:

for feature in points[group]

:# 算出測試集點p和訓練集上的每乙個點之間的歐氏距離(即勾股定理)

euclidean_distance = math.sqrt(

(feature[0]

- p[0]

)**2+

(feature[1]

- p[1]

)**2)

# 把這些距離和所屬類別放入乙個陣列內

(euclidean_distance, group)

)# 先按照歐氏距離由小到大排序,然後切出前k個數放入distanc作為代表

# list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,

# 而內建函式 sorted 方法返回的是乙個新的 list,而不是在原來的基礎上進行的操作。

# 因此不會對原list順序修改

distance =

sorted

(distance)

[:k]

print

(distance)

# 記錄這些距離屬於類0或類1的個數

freq1 =

0 freq2 =

0# 若前k個最小的距離當中屬於類0的個數更多,則屬於類0;反之則屬於類1

for d in distance:

if d[1]

==0: freq1 +=

1elif d[1]

==1: freq2 +=

1# 返回所屬概率更大的那一類

return

0if freq1 > freq2 else

1

def

main()

:# 通過字典把這些點分成兩類,用鍵0和1表示

# 鍵0表示屬於類0

# 鍵1表示屬於類1

points =

# 測試點

p1 =(3

,5) p2 =(5

,3) x1 =[1

,2,3

,3,3.5,2

,2,1

] y1 =[12

,5,6

,10,8

,11,9

,7] x2 =[5

,3,4

,7,6

,3.8

,5.6,4

] y2 =[3

,2,9

,2,1

,1,4

,2] plt.title(

"class 0 & class 1"

) plt.scatter(x1, y1, c=

'g', marker=

'o', s=60)

plt.scatter(x2, y2, c=

'r', marker=

's', s=60)

plt.scatter(p1[0]

, p1[1]

, s=

100, marker=

'h', c=

'y')

# 黃色的

plt.scatter(p2[0]

, p2[1]

, s=

100, marker=

'h', c=

'b')

# 藍色的

plt.grid(linestyle=

'--'

) plt.axis([0

,15,0

,15])

plt.text(p1[0]

, p1[1]

," p1"

) plt.text(p2[0]

, p2[1]

," p2"

) plt.show(

)# k的值

k =5print

("p1**在類:{}"

.format

(classifyapoint(points, p1, k)))

print

("p2**在類:{}"

.format

(classifyapoint(points, p2, k)))

if __name__ ==

'__main__'

: main(

)

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

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

KNN K近鄰 演算法 簡單實現

k近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。cover和hart在1968年提出了最初的鄰近演算法。knn是一種分類 classification 演算法,它...

簡單的string類的模擬實現

綜述 c 標準庫提供了乙個字串型別string 該型別可以直接定義乙個字串物件,並且對字串進行各種操作 以下是本人根據c 標準庫中的string類,簡單的模擬實現該類 先看cpulspuls中string類的成員函式 其中我只實現圖中列出函式原型的幾個成員函式 1 實現之前先看看這寫函式及其過載函式...