http://blog.sina.com.cn/s/blog_69821363010156rs.html
http://blog.csdn.net/pennyliang/article/details/6998517
#include "stdio.h" int main(void) { float matrix[4][2]={{1,4},{2,5},{5,1},{4,2}};//矩阵 二维 float result[4]={19,26,19,20};//对应向量的真实值 f(x)=w1*x1+w2*x2 float theta[2]={2,5};//预测theta的初始值 float learning_rate = 0.01f;//学习速率,不能太小,太慢,不能太大,错过最优解。 float loss = 1000.0; //一个足够大的loss,该损失随着迭代不短减小 for(int i = 0;i<100&&loss>0.0001;++i)//迭代足够多的次数 { float error_sum = 0.0; /******开始开始****用4个数更行theta**********/ for(int j = 0;j<4;++j) { float h = 0.0;//表示预测的大小; for(int k=0;k<2;++k) { h += matrix[j][k]*theta[k]; } error_sum = result[j]-h; for( k=0;k<2;++k) { theta[k] += learning_rate*(error_sum)*matrix[j][k]; } } /**********************结束获得新的theta[k]*************/ printf("*************************************\n"); printf("theta now: %f,%f\n",theta[0],theta[1]); loss = 0.0; for( j = 0;j<4;++j) { float sum=0.0; for(int k = 0;k<2;++k) { sum += matrix[j][k]*theta[k]; //求的新的预测值 } loss += (sum-result[j])*(sum-result[j]);//求新的误差 } printf("loss ?now: %f\n",loss); } return 0; }