现在的位置: 首页 > 综合 > 正文

梯度下降法学习笔记

2013年08月09日 ⁄ 综合 ⁄ 共 973字 ⁄ 字号 评论关闭
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;
}

抱歉!评论已关闭.