梯度下降算法 java 完整代码
时间: 2023-10-11 14:26:25 浏览: 65
PGD.rar_pgd-249_pgd249_投影梯度_投影梯度下降_梯度下降
以下是一个简单的梯度下降算法的 Java 代码实现:
```java
public class GradientDescent {
public static void main(String[] args) {
// 定义样本数据
double[][] data = {{1, 2, 3}, {1, 3, 5}, {1, 4, 7}, {1, 5, 9}};
double[] label = {5, 7, 9, 11};
// 定义初始参数值
double[] theta = {0, 0, 0};
// 定义学习率
double alpha = 0.01;
// 定义迭代次数
int iterations = 1000;
// 进行梯度下降
for (int i = 0; i < iterations; i++) {
double[] gradient = new double[theta.length];
for (int j = 0; j < data.length; j++) {
double[] x = data[j];
double h = hypothesis(theta, x);
double error = h - label[j];
for (int k = 0; k < gradient.length; k++) {
gradient[k] += error * x[k];
}
}
for (int k = 0; k < theta.length; k++) {
theta[k] -= alpha * gradient[k];
}
}
// 输出最终参数值
System.out.println(Arrays.toString(theta));
}
// 假设函数
public static double hypothesis(double[] theta, double[] x) {
double h = 0;
for (int i = 0; i < theta.length; i++) {
h += theta[i] * x[i];
}
return h;
}
}
```
这段代码实现了一个简单的线性回归模型,使用梯度下降算法求解最优参数值。其中,样本数据为一个二维数组,每一行表示一个样本,第一列为常数项,后面的列为特征值;标签为一个一维数组,表示每个样本的标签值;初始参数值为一个一维数组,学习率和迭代次数为指定的值。在迭代过程中,通过计算梯度来更新参数值,最终输出最优参数值。
阅读全文