随机梯度下降(Stochastic gradient descent) C++

#include <iostream>
#include <vector>
#include <cmath>
#include <cfloat>

int main() {
    double datax[]={3.4,1.8,4.6,2.3,3.1,5.5,0.7,3.0,2.6,4.3,2.1,1.1,6.1,4.8,3.8};
    double datay[]={26.2,17.8,31.3,23.1,27.5,36.0,14.1,22.3,19.6,31.3,24.0,17.3,43.2,36.4,26.1};
    double cost=DBL_MAX;
    std::vector<double> v_datax,v_datay;
    for(size_t i=0;i<sizeof(datax)/sizeof(datax[0]);++i) {
        v_datax.push_back(datax[i]);
        v_datay.push_back(datay[i]);
    }
   
    int number=v_datax.size();
    double a=0,b=0,error=0;
    while(true) {
        for(std::vector<double>::iterator iterx=v_datax.begin(),itery=v_datay.begin();
        iterx!=v_datax.end(),itery!=v_datay.end();++iterx,++itery) {
            a=a-0.003*(a+b*(*iterx)-*itery);
            b=b-0.003*(a+b*(*iterx)-*itery)*(*iterx);
        }
        error=0;
        for(std::vector<double>::iterator iterx=v_datax.begin(),itery=v_datay.begin();
    iterx!=v_datax.end(),itery!=v_datay.end();++iterx,++itery) {
            error+=(a+b*(*iterx)-*itery)*(a+b*(*iterx)-*itery)*0.5/number;
        }
        if(std::abs(cost-error)<0.0000000000001)
            break;
        cost=error;
    }
    std::cout<<"a = "<<a<<std::endl;
    std::cout<<"b = "<<b<<std::endl;
   
    return 0;
}

时间: 2024-08-05 16:15:08

随机梯度下降(Stochastic gradient descent) C++的相关文章

随机梯度下降 Stochastic gradient descent

梯度下降法先随机给出参数的一组值,然后更新参数,使每次更新后的结构都能够让损失函数变小,最终达到最小即可. 在梯度下降法中,目标函数其实可以看做是参数的函数,因为给出了样本输入和输出值后,目标函数就只剩下参数部分了,这时可以把参数看做是自变量,则目标函数变成参数的函数了. 梯度下降每次都是更新每个参数,且每个参数更新的形式是一样的,即用前一次该参数的值减掉学习率和目标函数对该参数的偏导数(如果只有1个参数的话,就是导数) 为什么要这样做呢? 通过取不同点处的参数可以看出,这样做恰好可以使原来的目

【ML-3】梯度下降(Gradient Descent)小结

目录 简述 梯度下降与梯度上升 梯度下降法算法详解 梯度下降法大家族(BGD,SGD,MBGD) 梯度下降法和其他无约束优化算法的比较 总结 ? ? 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法(在[2]中已经讲解了).这里就对梯度下降法做一个完整的总结. 一.简述 在微积分里面,对多元函数的参数求?偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度. 比如函数f(x,y), 分别对x,

梯度下降(Gradient Descent)小结

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微积分里面,对多元函数的参数求?偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度.比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(?f/?x, ?f/?y)T,简称grad f(x,y)或者▽f(x,y).对于在点(x0,y0)的具体梯度向量就是(?f/?x0, ?f/?

梯度下降(Gradient Descent)相关概念

梯度,直观理解: 梯度: 运算的对像是纯量,运算出来的结果会是向量在一个标量场中, 梯度的计算结果会是"在每个位置都算出一个向量,而这个向量的方向会是在任何一点上从其周围(极接近的周围,学过微积分该知道甚么叫极限吧?)标量值最小处指向周围标量值最大处.而这个向量的大小会是上面所说的那个最小与最大的差距程度" 举例子来讲会比较简单,如果现在的纯量场用一座山来表示,纯量值越大的地方越高,反之则越低.经过梯度这个运操作数的运算以后,会在这座山的每一个点上都算出一个向量,这个向量会指向每个点最

梯度下降(Gradient Descent)

在求解机器学习算法的优化问题时,梯度下降是经常采用的方法之一. 梯度下降不一定能够找到全局最优解,有可能是一个局部最优解.但如果损失函数是凸函数,梯度下降法得到的一定是全局最优解. 梯度下降的相关概念: 1.步长或学习率(learning rate):步长和学习率是一个东西,只是在不同的地方叫法不一样,以下叫做步长.步长决定了在梯度下降过程中,每一步沿梯度负方向前进的长度. 2.假设函数(hypothesis function):也就是我们的模型学习到的函数,记为. 3.损失函数(loss fu

多变量线性回归时使用梯度下降(Gradient Descent)求最小值的注意事项

梯度下降是回归问题中求cost function最小值的有效方法,对大数据量的训练集而言,其效果要 好于非迭代的normal equation方法. 在将其用于多变量回归时,有两个问题要注意,否则会导致收敛速度小,甚至无法收敛. 1. 特征均一化(Feature Scaling) 当特征量多时,需呀使用每个特征的均值.范围来使每个特征都均一化到[-0.5, 0.5]的范围 即: f_normed = (f - f_average) / (f_max - f_min) 这样能使得cost func

深度学习之(十一)Deep learning中的优化方法:随机梯度下降、受限的BFGS、共轭梯度法

Deep learning中的优化方法 三种常见优化算法:SGD(随机梯度下降),LBFGS(受限的BFGS),CG(共轭梯度法). 1.SGD(随机梯度下降) 随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模问题. 要想扯清楚它,还得先谈谈梯度下降.众所周知,每个优化问题都会有一个目标函数F(w)F(w),梯度下降采用迭代的策略,从初始点w0w0开始,每次沿着目标函数在当前点的负梯

Optimization:Stochastic Gradient Descent

原文地址:http://cs231n.github.io/optimization-1/ ########################################################################3 内容列表: 1.介绍 2.可视化损失函数 3.最优化 3.1.策略1:随机搜索 3.2.策略2:随机局部搜索 3.3.策略3:跟随梯度 4.计算梯度 4.1.有限差分(Numerically with finite differences) 4 .2 . 微积分

随机梯度下降(stochastic gradient descent),批梯度下降(batch gradient descent),正规方程组(The normal equations)

对于一个线性回归问题有 为了使得预测值h更加接近实际值y,定义 J越小,预测更加可信,可以通过对梯度的迭代来逼近极值 批梯度下降(batch gradient descent)(the entire training set before taking a single step) 随机梯度下降(stochastic gradient descent)(gets θ "close" to the minimum much faster than batch gradient desce

【转】 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比

梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟合的函数,J(theta)损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了.其中m是训练集的记录条数,j是参数的个数. 1.批量梯度下降的求解思路如下: (1)将J(theta)对theta求偏导,得到每个theta对应的的梯度 (2)由于是