RandomizedSearchCV是否自动包含传递给构造函数的默认模型参数?

2024-04-29 02:14:07 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我创建了这样一个RandomizedSearchCV

searcher = model_selection.RandomizedSearchCV(estimator = RandomForestClassifier(),
                                            param_distributions = random_grid,
                                            n_iter = 20, # Number of parameter combinations to try
                                            cv     = 3,  # Number of folds for k-fold validation 
                                            n_jobs = -1) # Use all processors to compute in parallel
search = searcher.fit(x_train, y_train)
search.best_params_

n_iter告诉我们搜索将测试多少个组合。对我来说,知道作为20种组合的一部分或除了20种组合之外,还包括默认模型参数是非常重要的。有人知道这是真是假吗


Tags: oftonumbersearchmodelparamtrainrandom
1条回答
网友
1楼 · 发布于 2024-04-29 02:14:07

他们是而不是(可以说,如果是这样的话,那会很奇怪)

尝试的参数组合的详细值将在拟合的RandomizedSearchCV对象的属性cv_results_中返回。根据docs(使用默认的n_iter = 10)调整示例,我们得到:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform

iris = load_iris()
logistic = LogisticRegression(solver='saga', tol=1e-2, max_iter=200,
                               random_state=0)
distributions = dict(C=uniform(loc=0, scale=4),
                      penalty=['l2', 'l1'])
clf = RandomizedSearchCV(logistic, distributions, random_state=0)

search = clf.fit(iris.data, iris.target)
search.cv_results_

您可以直接检查search.cv_results_返回的字典,也可以将其导入pandas数据帧以获得更紧凑的表示形式:

import pandas as pd
df = pd.DataFrame.from_dict(search.cv_results_)
df['params']
# result:
0      {'C': 2.195254015709299, 'penalty': 'l1'}
1     {'C': 3.3770629943240693, 'penalty': 'l1'}
2     {'C': 2.1795327319875875, 'penalty': 'l1'}
3     {'C': 2.4942547871438894, 'penalty': 'l2'}
4       {'C': 1.75034884505077, 'penalty': 'l2'}
5    {'C': 0.22685190926977272, 'penalty': 'l2'}
6     {'C': 1.5337660753031108, 'penalty': 'l2'}
7     {'C': 3.2486749151019727, 'penalty': 'l2'}
8     {'C': 2.2721782443757292, 'penalty': 'l1'}
9       {'C': 3.34431505414951, 'penalty': 'l2'}

从这里可以清楚地看出LogisticRegressionC=1.0default未包含在搜索网格中

如果您有任何理由使用默认参数来评估模型的性能,那么您应该单独进行评估——可以说这非常简单(只需两行代码)

相关问题 更多 >