java 一元线性回归_一元线性回归的java实现
我們有兩組數據,比如連續5年的pv與uv。
我們想預測一下,uv達到500k那么pv會是多少。當然更有意思可能是,如果銷售額是500w的話,pv會是多少。
機器學習里的一元線性回歸方法是比較簡單的方法,就是我們猜是滿足y=wx+b的。
那么,按求均方誤差的偏導后,可得到如下兩公式:
下面是求b的公式,要用到w:
用java代碼來實現一下這兩公式:
package net.highersoft.svm;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.List;
public class TestLineXY {
public static void main(String[] args) {
DecimalFormat df=new DecimalFormat("0.##");
//x pv
//y uv
List x=Arrays.asList(5,9,15,19,19,45);
List y=Arrays.asList(4,6,12,15,15,37);
/*
List x=Arrays.asList(4,6,8,10,12);
List y=Arrays.asList(7.8d,9.3d,9.9d,11.2d,11.9d);
*/
System.out.println(x+""+y);
if(x.size()!=y.size()) {
System.out.println("分子分母數量不一致。");
return;
}
long sum=0;
for(Integer xi:x) {
sum+=xi;
}
double avgx=sum*1.0/y.size();
System.out.println("avg_x:"+avgx);
//w的分子
double w_molecule=0;
for(int i=0;i
w_molecule+=y.get(i)*(x.get(i)-avgx);
//System.out.print(y.get(i)+"*("+x.get(i)+"-"+avgx+") +");
}
System.out.println();
//System.out.println("w_molecule:"+w_molecule);
//w的分母
double w_denominator=0;
int w_denominator_xi=0;
for(int i=0;i
w_denominator+=Math.pow(x.get(i),2);
w_denominator_xi+=x.get(i);
}
w_denominator=w_denominator-(1.0/x.size())*(Math.pow(w_denominator_xi,2));
//System.out.println("w_denominator:"+w_denominator+" w_denominator_xi:"+w_denominator_xi);
double w=w_molecule/w_denominator;
System.out.println("w:"+w);
double b=1.0/x.size();
double sum_y_wx=0;
for(int i=0;i
sum_y_wx+=(y.get(i)-w*x.get(i));
}
b=b*sum_y_wx;
System.out.println("b:"+b);
String symbol="+";
if(b<0) {
symbol="";
}
System.out.println("y="+df.format(w)+"x"+symbol+df.format(b));
System.out.println(w*15+b);
}
}
評論:
提交
總結
以上是生活随笔為你收集整理的java 一元线性回归_一元线性回归的java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几元一根和十几元一根的雪糕到底啥区别?
- 下一篇: I社美女游戏新作预告公布 身体和肌肤更加