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

梯度下降算法作为一种最优化的算法,简单来说就是沿着梯度下降的方向寻求一个函数的最小值。有关梯度下降的原理,推荐一位作者的介绍,可以说很详细,作者从简单的概念入手,到梯度下降的详细解释值得参考:梯度下降(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语言 插入到一个有序的单链表
下一篇最优化算法之牛顿法与拟牛顿法学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭