python實現KNN演算法

2021-09-19 23:14:14 字數 2048 閱讀 6393

具體**如下

import numpy as np

import matplotlib.pyplot as plt

class myknn():

def __init__(self, k):

self.k = k

def compute(self, x_train, y_train, x_test):

dist =

i = 0

# 計算歐式距離

for x in x_train:

i += 1

# 對歐式距離進行排序, 去除前k個小的值, dist_k表示前k個小的值的下標

dist_k = np.argsort(dist)[0:self.k]

# 先取出k個最小距離的y值大小

y_train_k =

for y in dist_k:

y_train_k = np.array(y_train_k)

y_train_k = y_train_k + 1

return np.argmax(np.bincount(y_train_k))

def draw(x_train, y_train, x_new):

# 正負例項點初始化

x_po=np.zeros(x_train.shape[1])

x_ne=np.zeros(x_train.shape[1])

# 區分正、負例項點

for i in range(y_train.shape[0]):

if y_train[i]==1:

x_po=np.vstack((x_po,x_train[i]))

else:

x_ne=np.vstack((x_ne,x_train[i]))

# 例項點繪圖

plt.plot(x_po[1:,0],x_po[1:,1],"g*", label="1")

plt.plot(x_ne[1:, 0], x_ne[1:, 1], "rx", label="-1")

plt.plot(x_new[:, 0], x_new[:, 1], "bo", label="test_points")

# 測試點座標值標註

for xy in zip(x_new[:, 0], x_new[:, 1]):

plt.annotate("test{}".format(xy),xy)

# 設定座標軸

plt.axis([0,10,0,10])

plt.xlabel("x1")

plt.ylabel("x2")

# 顯示圖例

plt.legend()

# 顯示影象

plt.show()

def main():

# 訓練資料

x_train = np.array([[5, 4],

[9, 6],

[4, 7],

[2, 3],

[8, 1],

[7, 2]])

y_train = np.array([1, 1, 1, -1, -1, -1])

# 測試資料

x_new = np.array([[5, 3]])

k = 3

knn = myknn(k)

if knn.compute(x_train, y_train, x_new) == 0:

print('當k={}, 測試資料被分類為{}'.format(k, -1))

else:

print('當k={}, 測試資料被分類為{}'.format(k, 1))

draw(x_train, y_train, x_new)

if __name__ == '__main__':

main()

輸出如下

Python實現KNN演算法

from numpy import import operator def creatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 lables a a b b return group,lables def classify0 inx,dataset,...

python實現knn演算法

importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...

Python實現KNN演算法

一 作業題目 原生python實現knn分類演算法,用鳶尾花資料集。二 演算法設計 knn演算法核心思想 如果乙個樣本在特徵空間中的k個最相似 最近臨 的樣本中大多數屬於某個類別,則該樣本也屬於這個類別。knn k nearest neighbor 工作原理 存在乙個樣本資料集合,也稱為訓練樣本集,...