Оценка регрессии уменьшается с помощью Gridsearch

#scikit-learn #decision-tree #gridsearchcv

#scikit-learn #дерево решений #gridsearchcv

Вопрос:

Я новичок в scikit learn, поэтому, пожалуйста, извините мое невежество. Используя GridSearchCV, я пытаюсь оптимизировать DecisionTreeRegressor. Чем шире я делаю пространство параметров, тем хуже становится оценка.

Установка min_samples_split в диапазон (2,10) дает мне значение neg_mean_squared_error, равное -0,04. При установке значения в диапазон (2,5) оценка равна -0,004.

 simple_tree =GridSearchCV(tree.DecisionTreeRegressor(random_state=42), n_jobs=4, param_grid={'min_samples_split': range(2, 10)}, scoring='neg_mean_squared_error', cv=10, refit='neg_mean_squared_error')

simple_tree.fit(x_tr,y_tr).score(x_tr,y_tr)
  

Я ожидаю равного или более положительного результата для более обширного поиска по сетке по сравнению с менее обширным.

Ответ №1:

Вы правы, у вас должна быть метрика, которая приближается к 0 при наличии большего количества параметров.. если бы вы действительно сравнивали одну и ту же модель каждый раз. В предоставленном вами коде это не так, потому что вы не установили random_state параметр в своем дереве решений.

Сделайте DecisionTreeRegressor(random_state = 42) (или любое целое число), и вы должны получить более разумные результаты.

Комментарии:

1. Большое спасибо за ваш комментарий. Я понимаю, что исправление случайного состояния обеспечит воспроизводимость кода. Не могли бы вы, пожалуйста, объяснить, когда не следует использовать фиксированное random_state?

2. К сожалению, это не решило проблему. При установке random_state = 42 я получаю -0.004 против -0.04

3. Вы повторно разделяете X_train для обеих попыток?

4. Что касается вашего первого вопроса, вам нужно быть осторожным, чтобы не злоупотреблять random_state . Я бы посоветовал использовать его только тогда, когда вы хотите обеспечить воспроизводимость, как в этом примере

5. Вы имеете в виду повторное разделение, установив CV = 10? Да, это так.

Ответ №2:

Использование simple_tree.best_score _ дает средний наилучший результат по всем сгибам CV.