import KNN import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D g_Labels = ['largeDoses', 'smallDoses', 'didntLike'] g_color = ['red', 'orange', 'gray', 'blue'] if __name__ == '__main__': print("\t\t\t============ Chap3 KNN ============") x, y = DS.load_dataset(r'.\dataset.dat') ## convert y to label y = np.array(list(map(lambda y1: g_Labels.index(y1), y))) y = np.reshape(y, (-1, 1)) model = KNN.KNN_Model() model.train(x, y) x_test = DS.load_test_ds(r'.\testds.dat') print(x_test) y_test = model(x_test) yy_test = list(g_Labels[int(y1)] for y1 in y_test) print(yy_test) '''draw plot''' fig1 = plt.figure() ax = Axes3D(fig1) for i in range(len(y)): _x = x[i] _y = int(y[i])
X, y, _ = vector_label(trainpath) X_test, y_test, testfilenames = vector_label(testpath) print('训练集 %d个' % X.shape[0]) print('测试集 %d个' % X_test.shape[0]) # knn=KNN.KNN_Model(5) # knn.fit(X,y) # rand_indexs=random.sample([i for i in range(110)],10) # for i in rand_indexs: # p=knn.predict(np.array([X_test[i]])) # print('文件%s 被预测为%d'%(testfilenames[i],p[0])) # # 自己实现的 for k in [3, 5, 10]: myknn = KNN.KNN_Model(k, metric='euclidean') myknn.fit(X, y) pred = myknn.predict(X_test) print('k=%d 预测正确率为 %f' % (k, evaluate_acc(y_test, pred))) print() # sklearn knn = KNeighborsClassifier(algorithm='brute') # 参数选择 param_grid = {'n_neighbors': [i for i in range(3, 10)]} grid = GridSearchCV(knn, param_grid, n_jobs=3) grid.fit(X, y) print("The best parameters are %s" % grid.best_params_) model = grid.best_estimator_ y_pred = model.predict(X_test) print('acc=%f' % accuracy_score(y_test, y_pred))