【问题标题】:does RandomizedSearchCV automatically include the default model parameters that are passed to the constructor?RandomizedSearchCV 是否自动包含传递给构造函数的默认模型参数?
【发布时间】:2020-04-29 22:07:39
【问题描述】:

假设我像这样创建了一个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 种组合的一部分或除此之外,还包括默认模型参数是非常重要的。有人知道这是真是假吗?

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    它们不是(可以说,如果是这样的话,那就太奇怪了)。

    尝试的参数组合的详细值在拟合的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'}
    

    很明显,C=1.0default 值对于LogisticRegression包含在搜索网格中的。

    如果您有任何理由使用其默认参数评估模型的性能,您应该单独进行 - 可以说它非常简单(只需 2 行代码)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 2012-12-10
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 2012-06-30
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多