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