首页 > 代码库 > MLlib--保序回归
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 = http://www.mamicode.com/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 = http://www.mamicode.com/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 }
设置运行参数
E:\IDEA_Projects\mlib\data\IsR\train\sample_isotonic_regression_data.txt E:\IDEA_Projects\mlib\data\IsR\model true local
MLlib--保序回归
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。