#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.