具體**如下
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 工作原理 存在乙個樣本資料集合,也稱為訓練樣本集,...