Grid Search

Grid Search

初学机器学习,之前的模型都是手动调参的,效果一般。同学和我说他用了一个叫grid search的方法、可以实现自动调参,顿时感觉非常高级。吃饭的时候想调参的话最差不过也就是粗暴遍历吧,没想到回来看了grid search发现其实就是粗暴遍历

emmm越学越觉得,机器学习解决问题的思路有时候真的很粗暴

原文看这里吧,这篇文章总结的很好:https://www.jianshu.com/p/55b9f2ea283b

不过深度学习算是不用这种方法了,几千个feature嵌套起来怕是没救了

附上一个sklearn中gridSearch的实现:

>>> from sklearn import svm, datasets
>>> from sklearn.model_selection import GridSearchCV
>>> iris = datasets.load_iris()
>>> parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
>>> svc = svm.SVC()
>>> clf = GridSearchCV(svc, parameters)
>>> clf.fit(iris.data, iris.target)
GridSearchCV(estimator=SVC(),
             param_grid={'C': [1, 10], 'kernel': ('linear', 'rbf')})
>>> sorted(clf.cv_results_.keys())
['mean_fit_time', 'mean_score_time', 'mean_test_score',...
 'param_C', 'param_kernel', 'params',...
 'rank_test_score', 'split0_test_score',...
 'split2_test_score', ...
 'std_fit_time', 'std_score_time', 'std_test_score']
  • 注意上面的'C':[1, 10]不是1到10的意思,而是1和10,因为例子写的不太典型,[]的用法是这样的:'C': [1, 10, 100, 1000].如果要使用步长获取数组,应该这样写:list(range(from,to,step)),当然这样只能以整数为步长,如果要使用小数的话可以使用Numpy的arange:list(np.arange(from,to,step))
  • 注意方法的名称上面带了一个CV,它表示cross-validation.这里为什么要使用交叉验证呢?因为和直接train不同,直接train的时候我们只需要不断在整个训练集进行训练即可;而这里还涉及到了一个验证的问题,就是验证哪个参数效果是最好的,这就要求必须有一部分未经过训练的数据供验证(因为训练了的话表现会失实,一般会比未训练地表现好,因为我们已经对这些数据的验证误差修改了模型),所以必须使用交叉验证
posted @ 2019-12-01 12:58  别再闹了  阅读(6274)  评论(0编辑  收藏  举报