随机梯度下降回归 带截距的C++带类实现及案例
时间: 2024-03-05 20:48:21 浏览: 25
以下是一个带有截距的随机梯度下降回归的 C++ 类实现以及一个简单的案例:
```cpp
#include <iostream>
#include <vector>
#include <ctime>
#include <cmath>
using namespace std;
class SGDRegressor {
private:
double alpha; // 学习率
int n_iter; // 迭代次数
double w0, w1; // 回归系数
public:
SGDRegressor(double alpha = 0.01, int n_iter = 100) {
this->alpha = alpha;
this->n_iter = n_iter;
srand(time(NULL));
w0 = (double)rand() / RAND_MAX; // 初始化 w0
w1 = (double)rand() / RAND_MAX; // 初始化 w1
}
double predict(double x) {
return w0 + w1 * x;
}
void fit(vector<double> X, vector<double> y) {
int m = X.size();
for (int i = 0; i < n_iter; i++) {
for (int j = 0; j < m; j++) {
double y_pred = predict(X[j]);
double error = y_pred - y[j];
w0 = w0 - alpha * error;
w1 = w1 - alpha * error * X[j];
}
}
}
};
int main() {
vector<double> X = {1, 2, 3, 4, 5};
vector<double> y = {2, 4, 6, 8, 10};
SGDRegressor reg;
reg.fit(X, y);
double x_test = 6;
double y_pred = reg.predict(x_test);
cout << "预测结果:" << y_pred << endl;
return 0;
}
```
这个例子中,我们使用 SGDRegressor 类来实现随机梯度下降回归。类的构造函数中定义了学习率 alpha 和迭代次数 n_iter,初始化了回归系数 w0 和 w1。predict() 方法用于根据输入的 x 值预测 y 值,fit() 方法用于拟合数据。
在案例中,我们使用了输入向量 X 和输出向量 y 来训练模型。我们使用 fit() 方法拟合数据,然后使用 predict() 方法预测 x_test 对应的 y 值。
这个例子中我们使用了一个非常简单的数据集,但是原理适用于更复杂的数据集。