超参数调整——网格搜索

1. 超参数(hyperparameter)

在机器学习中,超参数是在开始学习过程之前设置值的参数。

  • 定义关于模型的更高层次的概念,如复杂性或学习能力。
  • 不能直接从标准模型训练过程中的数据中学习,需要预先定义。
  • 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定。

一些示例:

  • 树的数量或树的深度
  • 矩阵分解中潜在因素的数量
  • 学习率
  • 深层神经网络隐藏层数
  • k-means聚类中的簇数

2. 网格搜索

网格搜索法本质上是一种穷举法。
sklearn中提供的网格搜索方法:GridSearchCV, 它能够对estimator中我们指定的参数进行详尽搜索。

2.1 sklearn.model_selection.GridSearchCV

class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=nan, return_train_score=False)

主要参数:

  • estimator:估计器对象。
  • param_grid:以参数名称 ( str) 作为键的字典和要尝试作为值的参数设置列表,或此类字典的列表,在这种情况下,将探索列表中每个字典跨越的网格。
  • cv:交叉验证生成器。默认为5折交叉。

3.代码实例

利用决策树对红酒数据集进行分类的问题。

下面对sklearn决策树中的“criterion”, “max_depth”, “min_samples_leaf”三个属性的参数进行最优搜索:

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import GridSearchCV

wine = load_wine()

clf = tree.DecisionTreeClassifier()

param_grid = {"criterion": ["entropy", "gini"],
              "max_depth": [3, 4, 5, 6],
              "min_samples_leaf": [5, 6, 7, 8],
}

grid = GridSearchCV(clf, param_grid) 
grid.fit(wine.data, wine.target)

print(grid.best_params_, # 相关参数
      grid.best_score_,  # 评分
      grid.best_estimator_, # 估计器
      grid.best_index_)  # 索引

输出

{'criterion': 'entropy', 'max_depth': 4, 'min_samples_leaf': 5} 0.9165079365079365 DecisionTreeClassifier(criterion='entropy', max_depth=4, min_samples_leaf=5) 4

百度百科

你可能感兴趣的:(机器学习,机器学习,sklearn,python)