加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

最速下降法求解拟合系数-r语言

(2014-10-13 13:03:49)
标签:

股票

分类: r语言挖掘实现

 本算法的缺点是到后面收敛速度慢,所以选择合适的步长和迭代次数是关键。以前用matlab也写过类似的程序,可是后来一直没有得到理想的结果最终搁浅了,现在发现原来当时并不是程序的问题而是迭代的次数不够,最近在学习r语言编程,又重新回顾了该算法。

该算法思想是:沿着梯度(导数方向)方向去寻找最小值,如果步长设置为负,那么就是最大值了。线性拟合是求一条线,使得所有的样本点到这条线的距离的平方和最小,也称为最小二乘法,利用最速下降去寻找这个最小二乘是一个不错的选择。

R语言程序(最速下降):

zuisu<-function(x, y, k, alpha){
 m=length(y)
x0=rep(1,m)
x=cbind(x0,x)
 
 n=ncol(x)
  
    beta<-rep(1,n)
    beta=t(t(beta))
    y=t(t(y))
  
x3=t(x)
   for (i in 1:k){
         error<-y-x%*�ta
     beta<-beta+alpha*x3%*%error
        }
   return (beta)
  }

求解过程x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23)
y<-c(42.0,43.5,45.0,45.5,45.0,47.5,49.0,53.0,50.0,55.0,55.0,60.0)
source("zuisu.R")
zuisu(x,y,5000,0.1)   *迭代次数为5000次,迭代步长为0.1.

结果:

http://s14/mw690/003wp1j3gy6MMkUnrbL8d&690

 

R原自带的拟合结果:
http://s7/mw690/003wp1j3gy6MMl02giq06&690

 

 

案例二:

 

x1=c(76.0, 91.5, 85.5, 82.5, 79.0, 80.5, 74.5,
79.0, 85.0, 76.5, 82.0, 95.0, 92.5)
x2=c(50, 20, 20, 30, 30, 50, 60, 50, 40, 55,
40, 40, 20)
x=cbind(x1,x2)

y= c(120, 141, 124, 126, 117, 125, 123, 125,132, 123, 132, 155, 147)

source("zuisu.R")
zuisu(x,y,20000000,0.000015263)

  结果:

> zuisu(x,y,20000000,0.000015263)
          [,1]
x0 -62.9515872
x1   2.1364380
x2   0.4001706
  

 

r源代码:

blood<-data.frame(x1=c(76.0, 91.5, 85.5, 82.5, 79.0, 80.5, 74.5,
79.0, 85.0, 76.5, 82.0, 95.0, 92.5),
x2=c(50, 20, 20, 30, 30, 50, 60, 50, 40, 55,
40, 40, 20),y= c(120, 141, 124, 126, 117, 125, 123, 125,132, 123, 132, 155, 147))
lm.sol<-lm(y ~ x1+x2, data=blood)
summary(lm.sol)

-62.96
2.13
0.40022

 




 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有