【笔记+代码】网格搜索-GridSearchCV
文章目錄
- 1 為什么需要網格搜索?
- 1.1 參數
- 1.2 使用網格搜索的原因
- 2 網格搜索是什么?
- 3 如何進行網格搜索?
- 參考
1 為什么需要網格搜索?
在了解一個東西之前,首先,我們需要知道為什么要這樣做,即該東西的應用之地和好處。而在了解使用網格搜索的原因之前,需要先了解一個名詞——“參數”。
1.1 參數
參數,在程序里意義上來說就是一個變量。
而在機器學習模型中,它大致可以分為兩類:
- 超參數
- 在算法運行前需要決定的參數
- 模型參數
- 算法運行過程中學習的參數
以KNN模型為例,該模型是沒有模型參數的,而k則是典型的超參數,因為在算法開始前就需要指定選取目標點的多少個鄰居。
此外,若KNN中使用距離權重,且距離采用閔可夫斯基距離時,p也會成為一個超參數。
1.2 使用網格搜索的原因
不同的超參數設置,機器學習給出的結果也會不一樣,因此,也會一定程度上影響到對結果的評價指標。而往往人們會追求一個“最好”的結果,因此,就需要在眾多超參數的取值范圍中選取一個“最優”的值進行設置。
因此,使用網格搜索等手段,均是為了尋找好的超參數。
尋找好的超參數往往有多種手段:
前兩項,基本上像我們這種領域小白是不可能達到的了,因此只能采取第三種方法。
實驗搜索也就是常常說的一種類似“窮舉/遍歷”的手段。往往,我們會先人為給定一個搜索范圍,然后自行編寫一段代碼嵌套在主體算法的外面,或者使用現成的API調用搜索(比如網格搜索)。前者,對于不同的模型算法,還有搜索的個數,調整會比較多;后者,更為方便快捷。
2 網格搜索是什么?
如上述所言,網格搜索是為了尋找到好的超參數的一種實驗搜索手段,且其具有現成的API可以調用,方便快捷。
網格搜索的思想跟窮舉是類似的,因此下面以KNN模型為例,對其超參數進行搜索。先不使用網格搜索的方法,來體驗該思想。
可以發現,在進行不同模式下的搜索時(當超參數之間存在依賴關系時),需要寫多個程序,比如,只有在考慮距離的模式下,才能對閔可夫斯基距離的p進行搜索,不考慮的時候,不需要進行搜索。
此外,當要一次性搜索出的超參數集合的元素越來越多時,外面顯式嵌套的for循環也將越來越多,影響美觀。
而網格搜索則可以解決這些問題,即當超參數之間存在一定的依賴關系,可以一次性尋找最優的這些超參數。
3 如何進行網格搜索?
關于網格搜索的使用,詳細的可以參考我在后續的參考中的前兩個鏈接。
糾正:第一個文章中說cv默認為3折,但是官方文檔已經注明:
Changed in version 0.22: cv default value if None changed from 3-fold to 5-fold.
其它之處沒有詳細查閱,這個給我們一個巨大的提示:看博客確實可以快速get到各參數設置的用法,但是還要以官方文檔為準。
通常使用手冊:
- estimator:參數針對的搜索對象
- param_grid:超參的集合,本質上是一個列表,每個元素代表一組搜索(是一個字典),每個字典中的key是本次一次性要搜索的超參名字,對應的value是一個列表,描述搜索范圍,其每個元素是相應的搜索取值。
- n_jobs:與并行運行相關,即可以提高搜索速度,取值為整數,默認為1,大于1的整數表示運行核數(但不能超過運行主機有的核數),取-1代表使用主機所有的核數。
- cv:與交叉驗證有關,根據版本不同,默認值不同,默認3折或5折。
- verbose:取值為整數,默認在運行過程中不輸出任何東西,但如果設定取值,則取值越大,過程中輸出的信息越詳細。
下面給出一段網格搜索實例代碼:
from sklearn.model_selection import GridSearchCV param_grid = [{'weights': ['uniform'], 'n_neighbors': [i for i in range(1, 11)]},{'weights': ['distance'],'n_neighbors': [i for i in range(1, 11)], 'p': [i for i in range(1, 6)]} ] # 創建KNN分類器 knn_clf = KNeighborsClassifier() # 創建網格搜索實例 grid_search = GridSearchCV(knn_clf, param_grid, n_jobs=-1, verbose=2) # 進行網格搜索 grid_search.fit(X_train, y_train)此外,還可以調用grid_search的相關東西:
參考
本次博客旨在記錄初次學習到的網格搜索相關知識,并方便之后自己使用。
本次博客內容參考了以下相關資料:
GridSearchCV 簡介
網格搜索官方文檔
慕課網的機器學習課程
總結
以上是生活随笔為你收集整理的【笔记+代码】网格搜索-GridSearchCV的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLSQL Developer 64位
- 下一篇: 教师教育网各网页链接