我可以将 GridSearchCV 与 KNeighboursRegressor 一起使用吗?

时间:2021-02-28 15:16:36

标签: python scikit-learn knn

我有一个包含一些浮动列特征 (X_train) 和一个连续目标 (y_train) 的数据集。

我想在数据集上运行 KNN 回归,并且我想 (1) 进行网格搜索以进行超参数调整和 (2) 对训练进行交叉验证。

我写了这段代码:

from sklearn.model_selection import KFold
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.model_selection import RepeatedStratifiedKFold
X_train, X_test, y_train, y_test = train_test_split(scaled_df, target, test_size=0.2)

cv_method = RepeatedStratifiedKFold(n_splits=5, 
                                    n_repeats=3, 
                                    random_state=999)


# Define our candidate hyperparameters
hp_candidates = [{'n_neighbors': [2,3,4,5,6,7,8,9,10,11,12,13,14,15], 'weights': ['uniform','distance'],'p':[1,2,5]}]

# Search for best hyperparameters
grid = GridSearchCV(estimator=KNeighborsRegressor(), 
                      param_grid=hp_candidates, 
                      cv=cv_method,
                      verbose=1,  
                      scoring='accuracy', 
                      return_train_score=True)

grid.fit(X_train,y_train)

我得到的错误是:

Supported target types are: ('binary', 'multiclass'). Got 'continuous' instead.

我理解错误,我只能在分类中对 KNN 执行此方法,而不是回归。

但是我找不到的是如何编辑此代码以使其适用于 KNN 回归?有人可以向我解释如何做到这一点吗?

(所以最终的目标是我有一个数据集,我想调整参数,做交叉验证,并根据上面输出最好的模型并得到一些准确度分数,理想情况下分数在其他算法中具有可比性并且不是特定于 KNN,所以我可以比较准确度)。

还要提一下,这是我在 scikitlearn 中第一次尝试 KNN,所以欢迎所有评论/评论。

1 个答案:

答案 0 :(得分:0)

是的,您可以将 GridSearchCV 与 KNeighboursRegressor 一起使用。

由于您有一个度量选择问题, 您可以在此处阅读指标文档:https://scikit-learn.org/stable/modules/model_evaluation.html

适用于回归问题的指标不同于分类问题,您可以在此处查看适用的回归指标列表:

‘explained_variance’
‘max_error’
‘neg_mean_absolute_error’
‘neg_mean_squared_error’
‘neg_root_mean_squared_error’
‘neg_mean_squared_log_error’
‘neg_median_absolute_error’
‘r2’
‘neg_mean_poisson_deviance’
‘neg_mean_gamma_deviance’
‘neg_mean_absolute_percentage_error’

所以你可以选择一个来代替“accuracy”并进行测试。