当使用KNNClassifier作为estrimator并将algo作为kd_true

时间:2019-02-10 11:18:24

标签: knn gridsearchcv

我正在使用GridsearchCV超调参数。我正在使用的估算器是KNNClassifier,其名称为kd_tree。我要调整的唯一参数是我在参数网格中传递的n_neighbours。

我收到的输出如下所示

KNN Hyper GridSearchCV最佳分数KNeighborsClassifier(algorithm ='kd_tree',leaf_size = 30,metric ='minkowski',            metric_params = None,n_jobs = -1,n_neighbors = 14,p = 2,            weights ='uniform')

KNN Hyper GridSearchCV最佳参数[0.71428571 0.78571429 0.92857143 ... 0.85714286 0.78571429 0.85714286]

如果我将算法更改为“ brute_force”,那么我得到的输出如下:

KNN超参数GridSearchCV最高得分0.8375451263537906

KNN超参数GridSearchCV最佳参数{'n_neighbors':31}

问题

  1. 如何从算法为“ kd_tree”时生成的输出中找出最佳n_neighbours?

  2. 当KNN分类器中的算法值从brute_force更改为kd_tree时, GridsearchCV 的输出为何不同

def KNNgridsearchCV(hyperparam,algo,xdata,ydata):
    #KNN classifier - the single parameter that can tuned is n_neighbors
    param_grid = {'n_neighbors':np.arange(1,hyperparam)}
    knn = KNeighborsClassifier(algorithm=algo)
    knn_cv= GridSearchCV(knn,param_grid,cv=10,verbose=1,n_jobs=-1)
    #knn_cv.fit(bowtrain8_scaled,y_trn8)
    knn_cv.fit(xdata,ydata)

    return [knn_cv.best_score_,knn_cv.best_params_,knn_cv]

案例1。

使用algo ='brute_force'调用上述函数

return_list = KNNgridsearchCV(15,'brute',Xactual_scaled,f10ydata)

函数输出以优化n个邻居

print("KNN Hyper parameter using GridSearchCV best Score {0}\n".format(return_list[0]))
print("KNN Hyper parameter using GridSearchCV best Parameter {0}\n".format(return_list[1]))

输出

使用GridSearchCV的KNN Hyper参数最佳分数0.8379462494985961

使用GridSearchCV的KNN Hyper参数最佳参数{'n_neighbors': 9 }

案例2。

使用algo ='kd_tree'调用上述函数

return_list = KNNgridsearchCV(15,'kd_tree',Xactual_scaled,f10ydata)

输出

KNN Hyper GridSearchCV最佳分数KNeighborsClassifier(algorithm ='kd_tree',leaf_size = 30,metric ='minkowski',            metric_params = None,n_jobs = -1,n_neighbors = 14,p = 2,            weights ='uniform')

KNN Hyper GridSearchCV最佳参数[0.71428571 0.78571429 0.92857143 ... 0.85714286 0.78571429 0.85714286]

我希望Gridsearchcv将输出如下所示的行

使用GridSearchCV的KNN Hyper参数最佳参数{'n_neighbors':?}

在使用algo = kd_tree时,就像在algo = brute时一样

很抱歉,很长的帖子。

0 个答案:

没有答案