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])
Exemplo n.º 2
0
    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))