随机梯度的下降算法:(类似补偿算法)
算法实现如下:
package tide import scala.collection.mutable object SGD { val data=mutable.HashMap[Int,Int]() def getdata():mutable.HashMap[Int,Int]={ //生成数据集,数据集的大小需要调节观察,寻找数据集大小对迭代的影响 for(i<-1 to 50){ data+= (i -> (12*i)) } data } var a:Double=0 var b:Double=0.2 def sgd(x:Double,y:Double)={ a=a-b*((a*x)-y)//补偿算法(随机梯度下降算法,当寻找到最优化的参数时,a的变化趋于平滑) } def main(args: Array[String]): Unit = { val source=getdata() source.foreach(m=> {sgd(m._1,m._2)} ) println("final anwser: "+a) } 运行结果如下:要点:变量 的系数从零开始逼近,不断的补偿,直到找到最优化的系数,注意防止过拟合。
过拟合的解决方法:使用线性回归的方法解决
如有问题,欢迎提问