简单的梯度下降法求正玄函数局部最小值

机器学习 873 浏览

请输入图片描述 最近在看Stanford university的Andrew ng关于机器学习的视频,刚看到梯度下降法,做个小实验:使用梯度下降法求正玄函数局部最小值。

请输入图片描述

#include <stdio.h>  
#include <math.h>  
int main(int argc, char** argv)  
{  
    double err=0.00001;  //定义的收敛误差  
    double alpha=0.001; //学习率 学习率越小 学习速度越慢 但是学习率定大了可能会错过最小值  
    double x=-6;   //x的初始值 修改该值 能得到不同的局部最小值 显示了梯度下降法的不足  
    double yCurr=sin(x);  
    double yNext=0;  
    while (true)  
    {  
        x=x-alpha*cos(x);  
        yNext=sin(x);  
        if (abs(yNext-yCurr)<err)  
        {  
            yCurr=yNext;  
            break;  
        }  
        yCurr=yNext;  
    }  
    printf("%f\n",yCurr);  //y轴局部最小值  
    printf("%f\n",x); //局部最小值对应的x的值  
    return 0;  
}  

关注微信公众号 "Kooola大数据" :) 聊人生 | 聊技术