Выбранное вами имя для RandomizedSearchCV
объекта, best
, на самом деле является неправильным: best
будет содержать все параметры, а не только лучшие, включая параметры вашего RF модель, некоторые из которых будут переопределены во время рандомизированного поиска Таким образом, print(best)
, как и ожидалось, дает именно этот результат, то есть все значения параметров, включая значения RF по умолчанию, которые здесь фактически не будут использоваться (они будут переопределены по значениям в parameters
).
Вместо этого вы должны спросить:
print(best.best_params_)
для наилучших найденных параметров и
print(best.best_estimator_)
для всей модели RF с лучшими найденными параметрами.
Вот воспроизводимый пример, использующий данные радужной оболочки (и имя clf
вместо best
):
from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
from sklearn.model_selection import RandomizedSearchCV
iris = datasets.load_iris()
parameters = {
'bootstrap': [True, False],
'max_depth': [80, 90, 100, 110],
'min_samples_leaf': [3, 4, 5]
}
model = RandomForestClassifier()
clf = RandomizedSearchCV(model, parameters, cv=5, return_train_score=True, iid=True, n_iter = 4)
clf.fit(iris.data, iris.target)
Обратите внимание, что вывод консоли по умолчанию для этой последней команды fit
, даже без запроса print
, будет:
RandomizedSearchCV(cv=5, error_score='raise-deprecating',
estimator=RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators='warn', n_jobs=None,
oob_score=False, random_state=None, verbose=0,
warm_start=False),
fit_params=None, iid=True, n_iter=4, n_jobs=None,
param_distributions={'max_depth': [80, 90, 100, 110], 'bootstrap': [True, False], 'min_samples_leaf': [3, 4, 5]},
pre_dispatch='2*n_jobs', random_state=None, refit=True,
return_train_score=True, scoring=None, verbose=0)
, что практически совпадает с тем, о котором вы сообщаете (и я объяснил выше): только значения по умолчанию для вашей модели RF (поскольку вы не указали никаких параметров для model
), плюс сетка parameters
. Чтобы получить определенный набор параметров, вы должны использовать
clf.best_params_
# {'bootstrap': True, 'max_depth': 90, 'min_samples_leaf': 5}
и запрос clf.best_estimator_
действительно подтверждает, что мы получаем RF с этими точными значениями параметров:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=90, max_features='auto', max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=5, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=None,
oob_score=False, random_state=None, verbose=0,
warm_start=False)