#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
int main() {
double theta0 = 0, theta1 = 0;
double v = 0.005; double cost = INT_MAX;
vector<double>x; vector<double>y;
ifstream in("test.txt");
if (!in)
cout << "can not open" << endl;
double temp0, temp1;
while (in >> temp0 >> temp1) {
x.push_back(temp0);
y.push_back(temp1);
}
int m = x.size();
while (true) {
temp1 = 0; temp0 = 0;
for (int i = 0; i < m; i++) {
temp0 += (theta0 + theta1*x[i]) - y[i];
temp1 += ((theta0 + theta1*x[i]) - y[i])*x[i];
}
double odd_theta0 = theta0;
double odd_theta1 = theta1;
theta0 = theta0 - v*temp0/m;
theta1 = theta1 - v*temp1/m;
double temp = 0;
for (int i = 0; i < m; i++) {
temp+=(theta0 + theta1*x[i])*(theta0 + theta1*x[i]);
}
temp = 1.0 / 2 / m*temp;
if (abs(cost-temp) < 0.00000000000000000000001) break;
cost = temp;
}
cout << theta0 << endl;
cout << theta1 << endl;
}
梯度下降算法的C++实现
最新推荐文章于 2024-05-14 15:36:40 发布