模型選擇與調優
阿新 • • 發佈:2020-12-20
1、為什麼需要交叉驗證
交叉驗證目的:為了讓被評估的模型更加準確可信
2、什麼是交叉驗證(cross validation)
交叉驗證:將拿到的訓練資料,分為訓練和驗證集。以下圖為例:將資料分成5份,其中一份作為驗證集。然後經過5次(組)的測試,每次都更換不同的驗證集。即得到5組模型的結果,取平均值作為最終結果。又稱5折交叉驗證。
2.1 分析
我們之前知道資料分為訓練集和測試集,但是為了讓從訓練得到模型結果更加準確。做以下處理
- 訓練集:訓練集+驗證集
- 測試集:測試集
問題:那麼這個只是對於引數得出更好的結果,那麼怎麼選擇或者調優引數呢?
3、超引數搜尋-網格搜尋(Grid Search)
通常情況下,有很多引數是需要手動指定的(如k-近鄰演算法中的K值),這種叫超引數。但是手動過程繁雜,所以需要對模型預設幾種超引數組合。每組超引數都採用交叉驗證來進行評估。最後選出最優引數組合建立模型。
3.1 模型選擇與調優
- sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
- 對估計器的指定引數值進行詳盡搜尋
- estimator:估計器物件
- param_grid:估計器引數(dict){“n_neighbors”:[1,3,5]}
- cv:指定幾折交叉驗證
- fit:輸入訓練資料
- score:準確率
- 結果分析:
- bestscore:在交叉驗證中驗證的最好結果_
- bestestimator:最好的引數模型
- cvresults:每次交叉驗證後的驗證集準確率結果和訓練集準確率結果
4、Facebook簽到位置預測K值調優
- 使用網格搜尋估計器
# 使用網格搜尋和交叉驗證找到合適的引數 knn = KNeighborsClassifier() param = {"n_neighbors": [3, 5, 10]} gc = GridSearchCV(knn, param_grid=param, cv=2) gc.fit(x_train, y_train) print("選擇了某個模型測試集當中預測的準確率為:", gc.score(x_test, y_test)) # 訓練驗證集的結果 print("在交叉驗證當中驗證的最好結果:", gc.best_score_) print("gc選擇了的模型K值是:", gc.best_estimator_) print("每次交叉驗證的結果為:", gc.cv_results_)