zoukankan      html  css  js  c++  java
  • 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的时候我们只需要不断在整个训练集进行训练即可;而这里还涉及到了一个验证的问题,就是验证哪个参数效果是最好的,这就要求必须有一部分未经过训练的数据供验证(因为训练了的话表现会失实,一般会比未训练地表现好,因为我们已经对这些数据的验证误差修改了模型),所以必须使用交叉验证
  • 相关阅读:
    python 读写excel,基于win32com实现
    nginx中lua语言获取传参字符串转json打印key,value
    nginx中lua语言打印匹配正则表达式的内容
    nginx 对于post,get参数访问做xss,sql注入过滤
    javaWeb第五天---MVC设计模式
    javaWeb第四天-----jspELJSTL
    javaWeb第三天---http协议和会话技术
    javaWeb第一天
    JDBC第二天---JDBC工具类
    jdbc第三天---配置文件、dao模式
  • 原文地址:https://www.cnblogs.com/jiading/p/11965694.html
Copyright © 2011-2022 走看看