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的時候我們只需要不斷在整個訓練集進行訓練即可;而這里還涉及到了一個驗證的問題,就是驗證哪個參數效果是最好的,這就要求必須有一部分未經過訓練的數據供驗證(因為訓練了的話表現會失實,一般會比未訓練地表現好,因為我們已經對這些數據的驗證誤差修改了模型),所以必須使用交叉驗證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM