【机器学习笔记三】回归分析 - 岭回归
参考资料
【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) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)