機(jī)器學(xué)習(xí)超參數(shù)調(diào)優(yōu)總結(jié)(PySpark ML)
ML中的一個重要任務(wù)是模型選擇,或者使用數(shù)據(jù)為給定任務(wù)找到最佳的模型或參數(shù)。這也稱為調(diào)優(yōu)??梢詫蝹€的估計器(如LogisticRegression?)進(jìn)行調(diào)優(yōu),也可以對包括多種算法、特性化和其他步驟的整個pipeline?進(jìn)行調(diào)優(yōu)。用戶可以一次調(diào)優(yōu)整個Pipeline?,而不是分別調(diào)優(yōu) Pipeline 中的每個元素。
ML中的一個重要任務(wù)是模型選擇,或者使用數(shù)據(jù)為給定任務(wù)找到最佳的模型或參數(shù)。這也稱為調(diào)優(yōu)。可以對單個的Estimator?(如LogisticRegression?)進(jìn)行調(diào)優(yōu),也可以對包括多種算法、特性化和其他步驟的整個pipeline?進(jìn)行調(diào)優(yōu)。用戶可以一次調(diào)優(yōu)整個Pipeline?,而不是分別調(diào)優(yōu)Pipeline中的每個元素。
MLlib支持使用CrossValidator和TrainValidationSplit等工具進(jìn)行模型選擇。這些工具需要具備以下條件:
- 估計器:要調(diào)優(yōu)的算法或管道pipeline
- 一組參數(shù):可選擇的參數(shù),有時稱為搜索的“參數(shù)網(wǎng)格”
- 評估者:度量擬合模型在測試數(shù)據(jù)上的表現(xiàn)
這些模型選擇工具的工作方式如下:
- 他們將輸入數(shù)據(jù)拆分為單獨(dú)的訓(xùn)練和測試數(shù)據(jù)集。
- 對于每個(訓(xùn)練、測試)對,它們遍歷ParamMap 集合:
對于每個ParamMap?,使用這些參數(shù)擬合Estimator?,得到擬合的Model?,并使用Evaluator? 評估Model的性能。
- 他們選擇Model由表現(xiàn)最好的一組參數(shù)產(chǎn)生。
為了幫助構(gòu)造參數(shù)網(wǎng)格,用戶可以使用ParamGridBuilder。默認(rèn)情況下,參數(shù)網(wǎng)格中的參數(shù)集以串行方式計算。在使用CrossValidator或TrainValidationSplit運(yùn)行模型選擇之前,可以通過將并行度設(shè)置為2或更多(1的值將是串行的)來并行地進(jìn)行參數(shù)評估。并行度的值應(yīng)該謹(jǐn)慎選擇,以便在不超過集群資源的情況下最大化并行度,較大的值不一定會提高性能。一般來說,10以上的值對大多數(shù)集群來說應(yīng)該足夠了。
交叉驗證
CrossValidator交叉驗證器首先將數(shù)據(jù)集分割為一組折疊數(shù)據(jù)集,這些折疊數(shù)據(jù)集用作單獨(dú)的訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。例如,當(dāng)k=3次時,CrossValidator將生成3對(訓(xùn)練,測試)數(shù)據(jù)集,每對數(shù)據(jù)集使用2/3的數(shù)據(jù)進(jìn)行訓(xùn)練,1/3的數(shù)據(jù)進(jìn)行測試。為了評估一個特定的ParamMap, CrossValidator通過在3個不同的(訓(xùn)練,測試)數(shù)據(jù)集對上擬合Estimator產(chǎn)生的3個模型計算平均評估度量。
在確定最佳ParamMap之后,CrossValidator最終使用最佳ParamMap和整個數(shù)據(jù)集重新匹配Estimator。
訓(xùn)練驗證拆分
除了 CrossValidator 之外,Spark 還提供了用于超參數(shù)調(diào)優(yōu)的 TrainValidationSplit。TrainValidationSplit 只計算每個參數(shù)組合一次,而在 CrossValidator 的情況下是k次。因此,它的成本較低,但當(dāng)訓(xùn)練數(shù)據(jù)集不夠大時,它不會產(chǎn)生可靠的結(jié)果。
與 CrossValidator 不同,TrainValidationSplit 創(chuàng)建單個(訓(xùn)練、測試)數(shù)據(jù)集對。它使用 trainRatio 參數(shù)將數(shù)據(jù)集分成這兩部分。例如,當(dāng)trainRatio=0.75 時,TrainValidationSplit 將生成一個訓(xùn)練和測試數(shù)據(jù)集對,其中 75% 的數(shù)據(jù)用于訓(xùn)練,25% 用于驗證。
像 CrossValidator 一樣,TrainValidationSplit 最終使用最佳 ParamMap 和整個數(shù)據(jù)集匹配 Estimator。