java实现最小二乘法
时间: 2023-06-23 11:49:42 浏览: 53
以下是一个使用 Java 实现最小二乘法的示例代码,可以用于解决简单的线性回归问题:
```java
public class LinearRegression {
private double[] x;
private double[] y;
private double a;
private double b;
public LinearRegression(double[] x, double[] y) {
this.x = x;
this.y = y;
calculate();
}
private void calculate() {
double sum_x = 0;
double sum_y = 0;
double sum_xy = 0;
double sum_xx = 0;
for (int i = 0; i < x.length; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_xx += x[i] * x[i];
}
double n = x.length;
double avg_x = sum_x / n;
double avg_y = sum_y / n;
double denominator = sum_xx - sum_x * avg_x;
if (denominator == 0) {
// 如果分母等于0,说明 x 的值都相等,无法计算斜率
a = Double.NaN;
b = avg_y;
} else {
a = (sum_xy - sum_x * avg_y) / denominator;
b = avg_y - a * avg_x;
}
}
public double getSlope() {
return a;
}
public double getIntercept() {
return b;
}
public double predict(double x) {
return a * x + b;
}
}
```
该类接受两个数组 x 和 y 作为输入,分别表示自变量和因变量的取值。在构造函数中,会根据这两个数组计算出最小二乘法的参数 a 和 b,其中 a 表示斜率,b 表示截距。类中还提供了 getSlope 和 getIntercept 方法,分别用于获取斜率和截距的值。predict 方法可以根据给定的自变量值 x,预测对应的因变量值 y。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)