看代码理解批量梯度下降求解线下回归问题

Posted longwind09,多容寡欲,千里江河

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看代码理解批量梯度下降求解线下回归问题相关的知识,希望对你有一定的参考价值。


layout: post
title: 梯度下降算法
subtitle: 批量梯度下降求解线下回归问题
date: 2017-12-01
author: Felix
catalog: true
tags:
- 机器学习
- 优化算法
---

//##############################################################
//#
//# 批量梯度下降算法实例:求解线性回归问题
//#
//##############################################################
#include <iostream>
using namespace std;
#define n_samples 4
#define n_features 2
int main(){
    //自变量 x1, x2
    float mat[n_samples][n_features]={{1,4}, {2,5}, {5,1}, {4,2}};
    //因变量,y
    float results[n_samples] = {19, 26, 19, 20};
    //权重,weights, 初始值设为
    float weights[n_features] = {0, 0};
    //损失函数值
    float loss = 1000;
    //学习率
    float leanring_rate = 0.01;
    //迭代500次或损失收敛
    for(int i=0; i<500 && loss > 0.001; ++i){
        //梯度
        float err_sum[n_features]={0.0, 0.0};
        //遍历样本
        for(int j=0; j < n_samples; ++j){
            //wx
            float h = 0.0;
            //遍历特征
            for(int k=0; k < n_features; ++k){
                h+=mat[j][k]*weights[k];
            }
            //计算梯度
            for(int k=0; k < n_features; ++k){
                err_sum[k] += (results[j] -h ) * mat[j][k];
            }
        }
        //更新权重
        for(int k=0; k < n_features; ++k){
            weights[k] += err_sum[k] * leanring_rate;
        }
        cout<<"weights-->"<<weights[0]<<","<<weights[1]<<endl;
        //更新损失
        for(int j=0; j < n_samples; ++j){
            float h = 0;
            for(int k = 0; k < n_features; ++k){
                h += mat[j][k] * weights[k];
            }
            loss += (results[j]-h)*(results[j]-h);
        }
    }
    return 0;
}

以上是关于看代码理解批量梯度下降求解线下回归问题的主要内容,如果未能解决你的问题,请参考以下文章

三种梯度下降方法与代码实现

机器学习之逻辑回归以及梯度下降法求解

线性回归之批量梯度下降代码实例

《计算机视觉和图像处理简介 - 中英双语 + 代码实践版》:最小批梯度下降求解Logistic回归

机器学习Linear Regression Experiment 线性回归实验 + Python代码实现

机器学习100天(十四):014 梯度下降算法求解线性回归