spark Pipeline,邏輯回歸、svm等算法交叉驗證


交叉驗證應用與各種算法中,用於驗證超參數的最優值。

常用的算法有邏輯回歸、神經網絡、ALS、SVM、決策樹等。

Spark中采用是k折交叉驗證 (k-fold cross validation)。舉個例子,例如10折交叉驗證(10-fold cross validation),將數據集分成10份,輪流將其中9份做訓練1份做驗證,10次的結果的均值作為對算法精度的估計。 10折交叉檢驗最常見,是因為通過利用大量數據集、使用不同學習技術進行的大量試驗,表明10折是獲得最好誤差估計的恰當選擇,而且也有一些理論根據可以證明這一點。但這並非最終結論,爭議仍然存在。而且似乎5折或者20折與10折所得出的結果也相差無幾。交叉檢驗常用於分析模型的泛化能力,提高模型的穩定。相對於手工探索式的參數調試,交叉驗證更具備統計學上的意義。在Spark中,Cross Validation和ParamMap(參數組合Map)結合使用。具體做法是,針對某有特定的ParamMap,CrossValidator計算K (K 折交叉驗證)個評估分數的平均值。然后和其他參數組合CrossValidator計算結果比較,最終將最優的參數組合挑選出來,用於整個訓練數據集上模型的重新訓練(re-fit)。也就是說,通過交叉驗證,找到了最佳的ParamMap,利用此ParamMap在整個訓練集上可以訓練(fit)出一個泛化能力強,誤差相對小的的最佳模型。

 

這里值得學習的是ML api提供了一個幫助我們尋找最佳參數的api

ALS交叉驗證參數    

rank取值(5,10,20)

regParam--正則化參數(0.05,0.10,0.15,0.20,0.40,0.80)

ParamMap[] paramGrid=new ParamGridBuilder()
      .addGrid(als.rank(),new int[]{5,10,20})
      .addGrid(als.regParam(),new double[]{0.05,0.10,0.15,0.20,0.40,0.80})
      .build();

 

CrossValidator交叉驗證
setNumFolds:五折交叉驗證
setEvaluator:模型評估

// CrossValidator 需要一個Estimator,一組Estimator ParamMaps, 和一個Evaluator.
      // (1)Pipeline作為Estimator;
      // (2)定義一個RegressionEvaluator作為Evaluator,並將評估標准設置為“rmse”均方根誤差
      // (3)設置ParamMap
      // (4)設置numFolds    

      CrossValidator cv=new CrossValidator()
      .setEstimator(pipeline)
      .setEvaluator(new RegressionEvaluator()
              .setLabelCol("rating")
              .setPredictionCol("predict_rating")
              .setMetricName("rmse"))
      .setEstimatorParamMaps(paramGrid)
      .setNumFolds(5);

  

// 運行交叉檢驗,自動選擇最佳的參數組合
      CrossValidatorModel cvModel=cv.fit(training);

  會通過五折交叉驗證確定ALS算法rank和正則參數的最優值


免責聲明!

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



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