批量梯度下降算法和随机梯度下降算法的代码实现

批量梯度下降算法和随机梯度下降算法的代码实现
随机梯度下降和批量梯度下降都是梯度下降方法的一种,都是通过求偏导的方式求参数的最优解。批量梯度下降算法:,。是通过对每一个样本求偏导,然后挨个更新。(对于大样本的实验,这种方法效率太低),而随机梯度下降算法则是从其中的所有样本中取出部分样本求偏导,对参数进行更新。

#include "stdio.h"  
#include<iostream>
using namespace std;

void main()
{
    float matrix[4][2] = { { 1, 4 }, { 2, 5 }, { 5, 1 }, { 4, 2 } };
    float result[4] = { 19, 26, 19, 20 };
    float theta[2] = { 2, 5 };
    float learning_rate = 0.001;
    float loss = 100.0;
    for (int i = 1; i<500 && loss>0.001; i++)
    {
        float error_sum[2] = { 0.0, 0.0 };
        for (int j = 0; j < 4; ++j)
        {
            float h = 0.0;
            for (int k = 0; k < 2; ++k)
            {
                h += matrix[j][k] * theta[k];
            }
            for (int k = 0; k < 2; ++k)
            {
                error_sum[k] += (result[j] - h)*matrix[j][k];
            }
        }
        for (int k = 0; k < 2; ++k)
        {
            theta[k] += error_sum[k] * learning_rate;
        }
        cout << "theta[2]=  " << theta[0] << "," << theta[1] << endl;
        float loss = 0.0;
        for (int j = 0; j < 4; ++j)
        {
            float h = 0.0;
            for (int k = 0; k < 2; ++k)
            {
                h += matrix[j][k] * theta[k];
            }
            loss += (result[j] - h)*(result[j] - h);
        }
        cout << "error of this algorithms is" << loss << endl;
    }
    system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值