线性回归的java实现
2015-08-28 20:20
507 查看
线性回归
梯度下降法
这里我没有使用ct0这个值
需要的jar包,还有数据可到这里下载
http://pan.baidu.com/s/1ntMRdlZ
预设的y=x1+2x2+3x3
梯度下降法
在选定线性回归模型后,只需要确定参数θ,就可以将模型用来预测。然而θ需要在J(θ)最小的情况下才能确定。因此问题归结为求极小值问题,使用梯度下降法。梯度下降法最大的问题是求得有可能是全局极小值,这与初始点的选取有关。 梯度下降法是按下面的流程进行的: 1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。 2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。 梯度方向由J(θ)对θ的偏导数确定,由于求的是极小值,因此梯度方向是偏导数的反方向。结果为
迭代更新的方式有两种,一种是批梯度下降,也就是对全部的训练数据求得误差后再对θ进行更新,另外一种是增量梯度下降,每扫描一步都要对θ进行更新。前一种方法能够不断收敛,后一种方法结果可能不断在收敛处徘徊。 本版本的java代码使用是第二种,也称随机梯度下降,每次只用一个样本进行梯度更新。
public class Line_Regression_wx { public static void main(String args[]) throws IOException { BufferedReader br = IOUtil.getReader("C:/test.txt", IOUtil.UTF8); String s = ""; Double ct[] = new Double[3];// 配置需要多少个参数,数据多少列就配置多少个参数 for (int i = 0; i < ct.length; i++) { ct[i] = 0.0;// 初始化所有参数为0 } // 训练数据:3,1,5 while ((s = br.readLine()) != null) { ct = line_regression(s, 0.001, ct); // System.out.println("ct1"+ct[1]); } // 输出训练出来的参数 for (int i = 0; i < ct.length; i++) { System.out.println(ct[i]); } } public static Double[] line_regression(String s, double afa, Double ct[]) { String st[] = s.split(","); Double x[] = new Double[st.length]; // 需要学习的参数 // System.out.println("x.length="+x.length); double a = afa;// 学习速率 // x[0]=1.0; for (int c = 0; c < x.length; c++) { x[c] = Double.parseDouble(st[c]); // System.out.println(x[c]); } Double y = Double.parseDouble(st[st.length - 1]); // System.out.println(y); // 根据参数求出预测的Y // Y=ct0+ct1*x[0]+ct2*x[1] Double Y = 0.0; for (int i = 0; i < ct.length; i++) { Y += ct[i] * x[i]; } // Y=Y+ct[0]; // 梯度下降法更新每个参数 for (int j = 0; j < ct.length; j++) { ct[j] = ct[j] + a * (y - Y) * x[j]; } return ct; } }
这里我没有使用ct0这个值
需要的jar包,还有数据可到这里下载
http://pan.baidu.com/s/1ntMRdlZ
预设的y=x1+2x2+3x3
相关文章推荐
- java tips 子字符串
- java tips 子字符串
- 如何结合使用 Subversion 和 Eclipse
- Eclipse插件开发之FindBugs插件
- 如何修改MyEclipse的默认工作路径Workplace
- Java之旅EJB(3)——Ant提高ejb开发效率
- 【Java笔记】——有趣的递归算法
- java.lang.NoSuchFieldException: mThumbDrawable
- Java之旅EJB(2)——三种bean之会话bean
- spring 拦截器(ProxyFactoryBean,BeanNameAutoProxyCreator)
- 25个让Java程序员更高效的Eclipse插件
- 影响Java EE性能的十大问题
- 单例模式下的双检锁DCL
- Eclipse插件大全 挑选最牛的TOP30
- Java学习笔记(1):访问修饰符protected和default的区别
- Java之旅EJB(1)——兵未动,粮草先行(jboss)
- java IO学习笔记
- Java 处理 XML 的三种主流技术及介绍
- java文件io操作
- maven与springMVC之ModelAttribute、SessionAttributes