MLlib--保序回归

Posted 日月的弯刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
 

以上是关于MLlib--保序回归的主要内容,如果未能解决你的问题,请参考以下文章

spark.mllib源码阅读-回归算法2-IsotonicRegression

Spark机器学习:保序回归算法

基于Isotonic回归(保序回归算法)的鸢尾花数据集回归问题

搜索系统10:机器学习算法浅析

scikit-learn: isotonic regression(保序回归,非常有意思,仅做知识点了解,但差点儿没用到过)

loj 3301 「联合省选 2020 A」魔法商店 - 拟阵 - 保序回归