Table of Contents

Lucas Wu

Gird Search

在了解网格搜索之前,需要明白参数(Parameter)和超参数(HyperParameter)的区别,Parameter是指算法通过学习数据自动计算出来得到的值,比如线性回归中的\beta系数,而HyperParameter是指人为设定、控制算法学习或者训练过程的变量,它不会被直接学习,但是会影响学习的行为和最终的学习效果。

比如开车超参数就是指你可以控制踩油门的力度、驾驶模式(运动、节能或者正常),而参数则是发动机的扭矩输出、油耗和摩擦力等,是汽车本身决定的,无法直接调整的。

而Grid Search的作用尝试遍历不同的超参数组合方式,生成不同的模型,并计算模型的评估值,最终找到最优超参数组合,让模型表现更好。

举例

Sklearn提供了Grid Search搜索的函数,可以通过如下方式导入:

from sklearn.model_selection import GridSearchCV

下面就通过演示通过Ridge回归预测房价的问题,然后通过Grid Search进行找到最佳超参数,数据为如下表格,价格为万元:

area(X1) room(X2) price(Y)
1 77 4 220
2 89 4 230
3 99 5 260
4 110 6 320
5 125 8 410

代码为:

import pandas as pd
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import Ridge

data = pd.DataFrame({"area": [77,89,99,110,125], "room": [4,4,5,6,8], "price": [220,230,260,320,410]})
parameters_grid = {'alpha': [0.001, 0.01, 0.1, 1, 10, 100]}

ridge_model = Ridge()

grid = GridSearchCV(ridge_model, parameters_grid, cv=5) #评估指标默认使用R^2

grid.fit(data[['area', 'room']], data[['price']]) # 训练模型

grid.best_estimator_ #查看最佳的超参数,输出为alpha:100
grid.cv_results_ #查看对应超参数以及对应的评估指标的值

for param, mean_val in zip(grid.cv_results_['params'], grid.cv_results_['mean_test_score']):
  print(param, mean_val)


"""输出最佳的R^2值为-3.85,alpha为100
{'alpha': 0.001} -5.673602295795709
{'alpha': 0.01} -5.706292846025019
{'alpha': 0.1} -5.9416525607274835
{'alpha': 1} -6.2458204928344285
{'alpha': 10} -4.4122468477234005
{'alpha': 100} -3.8580109543701897
"""
(完)