поиск в сетке по собственному оценщику с непрерывной целью в python - PullRequest
0 голосов
/ 25 марта 2019

Я написал реализацию вменения KNN и хотел, чтобы StratifiedKFold проверил, какую K и какую матрицу расстояний использовать. Я получил ошибку: кажется, он не распознает мою оценку как регрессор (функция «скоринг» предназначена для регрессии).

Мой код:

skf = StratifiedKFold(n_splits=10, shuffle=False, random_state=12)
NN = KnnImputation() # my own function
gridSearchNN = GridSearchCV(NN, param_grid=params, scoring='mean_squared_error', n_jobs=numIter,
                            cv=skf.split(xTrain, yTrain), verbose=verbose)
gridSearchNN.fit(xTrain, yTrain)

Ошибка:

  File "........\dataImputation.py", line 63, in knnImputationMethod
    gridSearchNN.fit(xTrain, yTrain)
  File "C:\Users\...\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py", line 651, in fit
    cv = check_cv(self.cv, y, classifier=is_classifier(estimator))
  File "C:\Users\....\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 2068, in check_cv
    return _CVIterableWrapper(cv)
  File "C:\Users\....\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 1966, in __init__
    self.cv = list(cv)
  File "C:\Users\...\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 331, in split
    for train, test in super(_BaseKFold, self).split(X, y, groups):
  File "C:\Users\...\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 100, in split
    for test_index in self._iter_test_masks(X, y, groups):
  File "C:\Users\...\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 681, in _iter_test_masks
    test_folds = self._make_test_folds(X, y)
  File "C:\Users\...\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py", line 636, in _make_test_folds
    allowed_target_types, type_of_target_y))
ValueError: Supported target types are: ('binary', 'multiclass'). Got 'continuous' instead.

В процессе "GridSearchCV" я увидел, что он перешел к "is_classifier" вместо "is_regressor".

Есть идеи?

1 Ответ

1 голос
/ 25 марта 2019

СтратифицированныйKFold

Принимает во внимание групповую информацию, чтобы избежать строительства складки с несбалансированным распределением классов (для двоичного или мультикласса классификационные задачи).

StraifiedKFold работает только с данными классификации, но не для регрессии.

https://scikit -learn.org / стабильный / модули / полученные / sklearn.model_selection.KFold.html

Заменить StratifiedKFold на KFold

Вы можете проверить источник здесь:

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/model_selection/_split.py#L570

...