在这个示例代码中,我们定义了一个`LinearRegression`结构体来表示线性回归模型。`train`函数用于训练模型,`predict`函数用于对给定的输入进行预测。 在`main`函数中,我们使用一些简单的训练数据对模型进行训练,并使用训练好的模型对一些测试数据进行预测。最后,我们打印出预测结果。
请注意,这只是一个简单的示例,实际应用中可能需要更复杂的数据处理和模型评估方法。
#include <stdio.h>
#include <stdlib.h>
// 线性回归模型结构体
typedef struct {
double theta0; // 截距项
double theta1; // 斜率项
} LinearRegression;
// 模型训练函数
void train(LinearRegression* lr, double* X, double* y, double learningRate, int epochs, int m) {
// 随机初始化参数
srand(time(NULL));
lr->theta0 = (double)rand() / RAND_MAX;
lr->theta1 = (double)rand() / RAND_MAX;
// 梯度下降优化参数
for (int epoch = 0; epoch < epochs; epoch++) {
// 计算预测值和误差
double* predictions = malloc(m * sizeof(double));
double* errors = malloc(m * sizeof(double));
for (int i = 0; i < m; i++) {
predictions[i] = lr->theta0 + lr->theta1 * X[i];
errors[i] = predictions[i] - y[i];
}
// 更新参数
double sum0 = 0.0, sum1 = 0.0;
for (int i = 0; i < m; i++) {
sum0 += errors[i];
sum1 += errors[i] * X[i];
}
lr->theta0 -= learningRate * (1.0 / m) * sum0;
lr->theta1 -= learningRate * (1.0 / m) * sum1;
free(predictions);
free(errors);
}
}
// 模型预测函数
void predict(LinearRegression* lr, double* X, double* predictions, int m) {
for (int i = 0; i < m; i++) {
predictions[i] = lr->theta0 + lr->theta1 * X[i];
}
}
int main() {
// 训练数据
double X[] = {1.0, 2.0, 3.0, 4.0, 5.0};
double y[] = {2.0, 4.0, 6.0, 8.0, 10.0};
int m = sizeof(X) / sizeof(X[0]);
// 创建线性回归模型
LinearRegression lr;
// 模型训练
double learningRate = 0.01;
int epochs = 1000;
train(&lr, X, y, learningRate, epochs, m);
// 模型预测
double XTest[] = {6.0, 7.0, 8.0, 9.0, 10.0};
int mTest = sizeof(XTest) / sizeof(XTest[0]);
double* predictions = malloc(mTest * sizeof(double));
predict(&lr, XTest, predictions, mTest);
// 打印预测结果
printf("预测结果:");
for (int i = 0; i < mTest; i++) {
printf("%f ", predictions[i]);
}
printf("\n");
free(predictions);
return 0;
}