梯度下降算法原理及在线性回归中的代码实现

原创 2018年04月16日 10:05:56

梯度下降算法作为一种最优化的算法,简单来说就是沿着梯度下降的方向寻求一个函数的最小值。有关梯度下降的原理,推荐一位作者的介绍,可以说很详细,作者从简单的概念入手,到梯度下降的详细解释值得参考:梯度下降(Gradient Descent)小结;就目前梯度下降算法在机器学习中各种算法参考:一文看懂常用的梯度下降算法。本文主要把批量梯度下降和随机梯度下降算法在线性回归中的应用用代码的形式展示出来,供初学者讨论学习。

  • 批量梯度下降算法(Batch Gradient Descent)

          该算法在迭代过程中利用的事所有样本,迭代的公式:

                                                  

                                                

   代码部分:

% 批量梯度下降算法在线性回归中的应用
% 对于线性模型
%    h(x)是需要拟合的函数;
%    j(θ)称为均方误差或cost function,用来衡量训练集中的样本对线性模型的拟合程度
%    m 为训练集样本的个数
%    θ是我们最终需要通过梯度下降法求得的参数
clc; clear; close all
theta = 0; % 设定初始的θ值
alpha = 0.001; % 设定步长α值
n = 0; %迭代次数n
x = [2 4 6 8 10]; %设定特征点
y = [3 6 9 12 15]; 
py = theta * x; %对函数h(x)进行拟合
J_theta = 0.5 * sum((y - py).^2) / 5;
while J_theta > 0.00001 || n < 10000
    delta_J = sum((py - y).* x) / 5;
    theta  = theta - alpha * delta_J;
    py = theta * x;
    J_theta = 0.5 * sum((y - py).^2) / 5;
    n = n + 1;
end

  • 随机梯度下降算法(Stochastic Gradient Descent)

         该方法每次迭代时随机选择一个样本,迭代公式:

                                                 

         代码部分:           

import random
input_x = [[1,4], [2,5], [5,1], [4,2]]
y = [19, 26, 19, 20]
theta = [1, 1]
loss = 10
step_size = 0.001
eps = 0.0001
max_iters = 10000
error = 0
iter_count = 0
while( loss > eps & iter_count < max_iters )
    loss = 0
    i = random.randint(0,3)
    pred_y = theta[0] * input_x[i][0] + theta[1] * input_x[i][1]
    theta[0] = theta[0] - step_size * (pred_y - y[i]) * input_x[i][0]
    theta[1] = theta[1] - step_size * (pres_y - y[i]) * input_x[i][1]
    for i in range (3)
        pred_y = theta[0] * input_x[i][0] + theta[1] * input_x[i][1]
        error = 0.5 * (pred_y - y[i]) ** 2
        loss = loss + error
        inter_count += 1

           












C++代码实现梯度下降算法并给出测试用例

此处仅给出代码实现,具体原理及过程请看前面的博文 测试文件输入格式如下: 2 10 0.01 10 2104 3 399900 1600 3 329900 2400 3 369000 1416 ...
  • u014403897
  • u014403897
  • 2015-04-24 15:09:54
  • 5252

梯度下降原理及线性回归代码实现(python/java/c++)

“梯度下降”顾名思义通过一步一步迭代逼近理想结果,当达到一定的精度或者超过迭代次数才退出,所以所获得的结果是一个近似值。在其他博客上面基本都有一个通俗的比喻:从山顶一步步下山。下面将用到几个概念: ...
  • liangyihuai
  • liangyihuai
  • 2017-08-17 23:15:19
  • 1088

机器学习算法入门之(一) 梯度下降法实现线性回归

文章的背景取自An Introduction to Gradient Descent and Linear Regression,本文想在该文章的基础上,完整地描述线性回归算法。部分数据和图片取自该文...
  • Titan0427
  • Titan0427
  • 2015-12-24 12:32:13
  • 55255

线性回归及梯度下降算法详解

一、线性回归问题   回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称...
  • Chenyukuai6625
  • Chenyukuai6625
  • 2017-07-05 12:04:37
  • 758

机器学习笔记(三) 线性回归及梯度下降算法

机器学习中线性回归相关的内容。包括线性回归损失函数的由来,梯度下降法的应用,正则化处理。...
  • sinat_22594309
  • sinat_22594309
  • 2017-02-15 14:44:07
  • 1477

利用梯度下降的方式求线性回归中参数的一些经验总结

这个是coursera里的machine learning课程的作业,在用matlab实现的过程中我总结了一些经验 1. 梯度下降也分成两个部分,一个是cost function的实现,一个是θ\t...
  • dawningblue
  • dawningblue
  • 2017-08-30 17:12:25
  • 319

梯度下降法求解线性回归之python实现

线性回归其实就是寻找一条直线拟合数据点,使得损失函数最小。直线的表达式为: yi=ω1xi,1+ω2xi,2+ωjxi,j+...+by_i = \omega_1x_{i,1}+\omega_2x_...
  • just_do_it_123
  • just_do_it_123
  • 2016-04-04 13:52:19
  • 4623

线性回归 c++代码实现

  • 2009年05月05日 21:50
  • 1001KB
  • 下载

线性回归及梯度下降_20170509

  • 2017年05月09日 22:41
  • 1016KB
  • 下载
收藏助手
不良信息举报
您举报文章:梯度下降算法原理及在线性回归中的代码实现
举报原因:
原因补充:

(最多只允许输入30个字)