Есть ли простой способ поиска сетки без перекрестной проверки в python?

Существует абсолютно полезный класс GridSearchCV в scikit-learn, чтобы выполнять поиск в сетке и перекрестная проверка, но я не хочу делать перекрестные проверки. Я хочу сделать поиск сетки без перекрестной проверки и использовать целые данные для обучения. Чтобы быть более конкретным, мне нужно оценить мою модель, сделанную RandomForestClassifier, с "oob score" во время поиска сетки. Есть ли простой способ сделать это? или я должен сам сделать класс?

Точки

  • Я хочу выполнить поиск в сетке простым способом.
  • Я не хочу делать перекрестные проверки.
  • Мне нужно использовать целые данные для обучения (не хотите отделяться для подготовки данных и тестовых данных).
  • Мне нужно использовать оценку oob для оценки во время поиска в сетке.

Ответ 1

Я бы посоветовал не использовать OOB для оценки модели, но полезно знать, как запускать поиск сетки за пределами GridSearchCV() (я часто делаю это, поэтому я могу сохранить предсказания CV из лучшей сетки для удобства модельная укладка). Я думаю, что самый простой способ - создать сетку параметров через ParameterGrid(), а затем просто пропустить каждый набор параметров. Например, если у вас есть сетка dict, называемая "сетка" и объект модели RF, называемая "rf", вы можете сделать что-то вроде этого:

for g in ParameterGrid(grid):
    rf.set_params(**g)
    rf.fit(X,y)
    # save if best
    if rf.oob_score_ > best_score:
        best_score = rf.oob_score_
        best_grid = g

print "OOB: %0.5f" % best_score 
print "Grid:", best_grid

Ответ 2

Один из методов заключается в использовании ParameterGrid для создания итератора требуемых параметров и его петли.

Еще одна вещь, которую вы могли бы сделать, это на самом деле настроить GridSearchCV на то, что вы хотите. Я бы не рекомендовал этого, потому что это излишне сложно. Что вам нужно сделать, это:

  • Используйте arg cv из docs и дайте ему генератор, который дает кортеж со всеми индексами (так что поезд и тест то же самое)
  • Измените аргумент scoring, чтобы использовать oob, выданный из леса Random.

Ответ 3

Смотрите эту ссылку: fooobar.com/info/555932/...

Он использовал cv=[(slice(None), slice(None))], который НЕ рекомендуется авторами sklearn.