我正在使用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}
问题
如何从算法为“ kd_tree”时生成的输出中找出最佳n_neighbours?
当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时一样
很抱歉,很长的帖子。