public class LinearRegression {
//求出来的b值
public static double getB(double[] x,double[] y,int j){
//首先先保证xy是数量相同的
double b=0;
//先对x求平均
double xp=0;
double yp=0;
for(int i=0;i<j;i++){
xp+=x[i];
yp+=y[i];
}
xp=xp/(double)j;
yp=yp/(double)j;
//第二步
// 计算一系列的差值 x-xp,y-yp
double xpp=0;
double ypp=0;
double zpp=0;
double xxp=0;
for(int k=0;k<j;k++){
xpp =(x[k]-xp);
ypp =(y[k]-yp);
zpp+=(xpp*ypp);
xxp+=(xpp*xpp);
}
b=zpp/xxp;
return b;
}
//最小二乘法求时间序列 数据线性回归公式
public static double[] getLinearAB(double[] x,double[] y){
double[] ab=new double[2];
if(x.length!=y.length) return ab;
//第一步 求x y 平均
double avg_x=0,avg_y=0;
for(int i=0;i<x.length;i++){
avg_x+=x[i];
avg_y+=y[i];
}
avg_x=avg_x/x.length;
avg_y=avg_y/x.length;
//第二步 所有点的横坐标求和结果,以及所有点的纵坐标求和结果
double sum_x=0,sum_y=0;
for(int i=0;i<x.length;i++){
sum_x+=x[i];
sum_y+=y[i];
}
//第三步 计算每个数据点横坐标的平方,然后求和,以及计算每个点横坐标乘以纵坐标的乘积,然后求和
double sum_x2=0,sum_xy=0;
for(int i=0;i<x.length;i++){
sum_x2+=x[i]*x[i];
sum_xy+=x[i]*y[i];
}
//第四步 求 b
int n=x.length;
ab[1]=(n*sum_xy-sum_x*sum_y)/(n*sum_x2-sum_x*sum_x);
//第五步 求 a
ab[0]=avg_y-ab[1]*avg_x;
return ab;
}
}
一种基于最小二乘法的回归分析
最新推荐文章于 2025-12-02 21:20:38 发布
2673

被折叠的 条评论
为什么被折叠?



