Есть ли простой способ поиска сетки без перекрестной проверки в 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.