四、超参数优化

4.1 GridSearchCV

  1. GridSearchCV用于实现超参数优化,其原型为:

    1. class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None,
    2. fit_params=None, n_jobs=1, iid=True, refit=True, cv=None,verbose=0,
    3. pre_dispatch='2*n_jobs', error_score='raise',return_train_score='warn')
    • estimator:一个学习器对象。它必须有.fit方法用于学习,.predict方法用于预测,有.score方法用于性能评分。

    • param_grid:字典或者字典的列表。每个字典都给出了学习器的一个超参数,其中:

      • 字典的键就是超参数名。
      • 字典的值是一个列表,指定了超参数对应的候选值序列。
    • fit_params:一个字典,用来给学习器的.fit方法传递参数。

    • iid:如果为True,则表示数据是独立同分布的。

    • refit:一个布尔值。如果为True,则在参数优化之后使用整个数据集来重新训练该最优的estimator

    • error_score:一个数值或者字符串'raise',指定当estimator训练发生异常时,如何处理:

      • 如果为'raise',则抛出异常。
      • 如果为数值,则将该数值作为本轮estimator的预测得分。
    • return_train_score: 一个布尔值,指示是否返回训练集的预测得分。

      如果为'warn',则等价于True 并抛出一个警告。

    • 其它参数参考cross_val_score

  2. 属性:

    • cv_results_:一个数组的字典。可以直接用于生成pandas DataFrame 。其中键为超参数名,值为超参数的数组。

      另外额外多了一些键:

      • mean_fit_timemean_score_timestd_fit_timestd_score_time:给出了训练时间、评估时间的均值和方差,单位为秒。
      • xx_score:给出了各种评估得分。
    • best_estimator_:一个学习器对象,代表了根据候选参数组合筛选出来的最佳的学习器。

      如果refit=False,则该属性不可用。

    • best_score_:最佳学习器的性能评分。

    • best_params_:最佳参数组合。

    • best_index_cv_results_中,第几组参数对应着最佳参数组合。

    • scorer_:评分函数。

    • n_splits_:交叉验证的 k 值。

  3. 方法:

    • fit(X[, y,groups]):执行参数优化。
    • predict(X) :使用学到的最佳学习器来预测数据。
    • predict_log_proba(X) :使用学到的最佳学习器来预测数据为各类别的概率的对数值。
    • predict_proba(X) :使用学到的最佳学习器来预测数据为各类别的概率。
    • score(X[, y]) :通过给定的数据集来判断学到的最佳学习器的预测性能。
    • transform(X):对最佳学习器执行transform
    • inverse_transform(X):对最佳学习器执行逆 transform
    • decision_function(X):对最佳学习器调用决策函数。
  4. GridSearchCV实现了estimator.fit.score方法。这些方法内部会调用estimator的对应的方法。

    在调用GridSearchCV.fit方法时,首先会将训练集进行 四、超参数优化 - 图1 折交叉,然后在每次划分的集合上进行多轮的训练和验证(每一轮都采用一种参数组合),然后调用最佳学习器的.fit 方法。

4.2 RandomizedSearchCV

  1. GridSearchCV采用的是暴力寻找的方法来寻找最优参数。当待优化的参数是离散的取值的时候,GridSearchCV能够顺利找出最优的参数。但是当待优化的参数是连续取值的时候,暴力寻找就有心无力。

    GridSearchCV的做法是从这些连续值中挑选几个值作为代表,从而在这些代表中挑选出最佳的参数。

  2. RandomizedSearchCV采用随机搜索所有的候选参数对的方法来寻找最优的参数组合。其原型为:

    1. class sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions,
    2. n_iter=10, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True,
    3. cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None,
    4. error_score='raise',return_train_score='warn')
    • param_distributions:字典或者字典的列表。每个字典都给出了学习器的一个参数,其中:

      • 字典的键就是参数名。

      • 字典的值是一个分布类,分布类必须提供.rvs方法。

        通常你可以使用scipy.stats模块中提供的分布类,比如scipy.expon(指数分布)、scipy.gamma(gamma分布)、scipy.uniform(均匀分布)、randint等等。

      • 字典的值也可以是一个数值序列,此时就在该序列中均匀采样。

    • n_iter:一个整数,指定每个参数采样的数量。通常该值越大,参数优化的效果越好。但是参数越大,运行时间也更长。

    • 其它参数参考GridSearchCV

  3. 属性:参考GridSearchCV

  4. 方法:参考GridSearchCV