MLlib--保序回歸


轉載請標明出處http://www.cnblogs.com/haozhengfei/p/24cb3f38b55e5d7516d8059f9f105eb6.html 


保序回歸

1.線性回歸VS保序回歸

   • 線性回歸->線性擬合
   • 保序回歸->保序的分段線性擬合,保序回歸是擬合原始數據最佳的單調函數

1.1保序回歸

 
    保序回歸是特殊的線性回歸,如果業務上具有單調性,這時候就可以用保序回歸,而不是用線性回歸。

1.2保序回歸應用場景

    葯劑和中毒的預測,劑量和毒性呈非遞減函數

1.3保序回歸模型使用

• 預測規則:
   – 如果預測輸入能准確匹配訓練特征,那么返回相關預測,如果有多個 預測匹配訓練特征,那么就返回其中之一。
   – 如果預測輸入比所有的訓練特征低或者高,那么最低和最高的訓練特 征各自返回。如果有多個預測比所有的訓練特征低或者高,那么都會 返回。
   – 如果預測輸入介於兩個訓練特征,那么預測會被視為分段線性函數和 從最接近的訓練特征中計算得到的插值。

1.4保序回歸code

IsotonicRegression_new
 1 import org.apache.log4j.{Level, Logger}
 2 import org.apache.spark.rdd.RDD
 3 import org.apache.spark.{SparkConf, SparkContext}
 4 import org.apache.spark.mllib.regression.{IsotonicRegressionModel, IsotonicRegression}
 5 
 6 /**
 7   * Created by hzf
 8   */
 9 object IsotonicRegression_new {
10     //  F:\額外項目\pensionRisk\data\IsR\train\sample_isotonic_regression_data.txt F:\額外項目\pensionRisk\data\IsR\model true local
11     def main(args: Array[String]) {
12         Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
13         if (args.length < 4) {
14             System.err.println("Usage: LRwithLGD <inputPath> <modelPath> Isotonic <master> [<AppName>]")
15             System.err.println("eg: hdfs://192.168.57.104:8020/user/000000_0 hdfs://192.168.57.104:8020/user/model true  spark://192.168.57.104:7077  IsotonicRegression")
16             System.exit(1)
17         }
18         val appName = if (args.length > 4) args(4) else "IsotonicRegression"
19         val conf = new SparkConf().setAppName(appName).setMaster(args(3))
20         val sc = new SparkContext(conf)
21         var isotonic = true
22         isotonic = args(2) match {
23             case "true" => true
24             case "false" => false
25         }
26         val data = sc.textFile(args(0))
27         val parsedData: RDD[(Double, Double, Double)] = data.map { line =>
28             val parts = line.split(',').map(_.toDouble)
29             (parts(0), parts(1), 1.0)
30         }
31 
32         val splitRdd: Array[RDD[(Double, Double, Double)]] = parsedData.randomSplit(Array(1.0, 9.0))
33         val testData = splitRdd(0)
34         val realTrainData: RDD[(Double, Double, Double)] = splitRdd(1)
35 
36         val model: IsotonicRegressionModel = new IsotonicRegression().setIsotonic(isotonic).run(realTrainData)
37         val predictionAndLabel = testData.map { point =>
38             val predictedLabel = model.predict(point._2)
39             (predictedLabel, point._1)
40         }
41 
42         val meanSquaredError = predictionAndLabel.map { case p => math.pow((p._1 - p._2), 2) }.mean()
43         println("meanSquaredError = " + meanSquaredError)
44         model.boundaries.zip(model.predictions).foreach(println(_))
45         model.save(sc, args(1))
46 
47     }
48 }
View Code
設置運行參數
  1. E:\IDEA_Projects\mlib\data\IsR\train\sample_isotonic_regression_data.txt E:\IDEA_Projects\mlib\data\IsR\model true local
 


免責聲明!

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



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