您的位置:首页 > 其它

【机器学习笔记三】回归分析 - 岭回归

2018-03-03 10:44 197 查看
参考资料

【1】 http://blog.csdn.net/google19890102/article/details/27228279

【2】 讲讲共线性问题 http://www.jianshu.com/p/ef1b27b8aee0?from=timeline

【3】 最小二乘法的矩阵形式推导 http://blog.csdn.net/monsterhoho/article/details/46753673

【4】 Spark MLlib 机器学习实践

1、共线性及多重共线性问题

对于最小二乘法,我们有矩阵形式的推导如下:



此时对x求导,有

,得到



对于上述解,当x中存在二个或多个线性相关形式,

就会接近于0,造成很大的误差,因此为了解决这个误差我们在代价函数中增加了扰动项,类似矩阵形式变为:



2、岭回归模型

所谓的岭回归就是在线性回归的基础上增加了正则项,通常为lasso回归(L1回归)和岭回归(L2回归)。岭回归公式如下:



3、岭回归Spark Mlib下例子

package com.fredric.spark.lr

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{RidgeRegressionWithSGD, LinearRegressionWithSGD, LabeledPoint}
import org.apache.spark.{SparkContext, SparkConf}

import scala.util.Random

/*-
* 回归分析 岭回归
* Fredric 2017
*/
object lrl2 {
def main(args:Array[String]): Unit ={
val conf = new SparkConf().setMaster("local").setAppName("Rr01")
val sc   = new SparkContext(conf)

//以二元线性回归y = 7*x1 + 5*x2 + 3为例,初始化数据
val Array = new Array[LabeledPoint](500)

for(t <- 1 to 500){

val random = new Random();

val x1 = random.nextInt(4) + random.nextDouble()
val x2 = random.nextInt(3) + random.nextDouble()
val y = 7 * x1 + 5 * x2 + (new Random()).nextDouble() + 3

Array(t-1) = new LabeledPoint(y,  Vectors.dense(x1, x2, 1))
}

val data = sc.makeRDD(Array)

//采用岭回归模型
val model = new RidgeRegressionWithSGD()
model.optimizer.setNumIterations(100);//迭代100次

val res = model.run(data)

//输出结果为 [7.016836776795048,5.045698277235657,3.3398441790354525]
println(res.weights)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: