梯度下降算法作为一种最优化的算法,简单来说就是沿着梯度下降的方向寻求一个函数的最小值。有关梯度下降的原理,推荐一位作者的介绍,可以说很详细,作者从简单的概念入手,到梯度下降的详细解释值得参考:梯度下降(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
扫描二维码关注公众号,回复:
1001614 查看本文章