手撕KNN

# 作為一個調包俠,也就敢手擼簡單的knn了,而且可能寫的還不對…………nnimport numpy as npnimport pandas as pdnfrom tensorflow import keras as ksnn(x_train, y_train), (x_test, y_test) = ks.datasets.mnist.load_data(path=n "/Users/baidumac/mnist.npz")nx_train = x_train.reshape(-1, 784)nx_test = x_test.reshape(-1, 784)nnnclass pyknn():nn # 預測標籤n def predict(x, neighbors, xsample,ysample):n distance = [np.sqrt(sum(pow((x - xsample[i, ...]),2))) for i in range(0, xsample.shape[0])]n label = [ysample[i, ...] for i in range(0, xsample.shape[0])]n df = pd.DataFrame({distance: distance, label: label})n df = df.sort_values(by=distance, ascending=1)n labeltop = df[label][:neighbors]n value_count = labeltop.value_counts()n y = np.argmax(value_count)nn return ynnn # 計算正確率n def evaluate(neighbors,xsample,ysample):n fpl = [pyknn.predict(xsample[i, ...],n neighbors,n xsample,n ysample) - ysample[i, ...] for i in range(0, xsample.shape[0])]nn accuracy = fpl.count(0) / xsample.shape[0]nn return accuracynnprint(pyknn.evaluate(50,x_test,y_test))n

推薦閱讀:

KNN演算法

TAG:机器学习 | k近邻法 | Python |