美文网首页
使用随机梯度下降法进行线性回归

使用随机梯度下降法进行线性回归

作者: Vector_Wan | 来源:发表于2019-05-04 16:45 被阅读0次

线性回归是机器学习入门知识,应用十分广泛。线性回归利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的,其表达形式为y = wx+b+ee为误差服从均值为0的正态分布。首先让我们来确认线性回归的损失函数:
loss = \sum_i^N \frac 1 2 ({y_i-(wx_i+b)})^2
然后利用随机梯度下降法更新参数\textbf{w}\textbf{b}来最小化损失函数,最终学得\textbf{w}\textbf{b}的数值。

import torch as t
%matplotlib inline
from matplotlib import pyplot as plt
from IPython import display

device = t.device('cpu') #如果你想用gpu,改成t.device('cuda:0')
# device = t.device('cuda:0') # 使用 gpu会报错 还没有解决--'
# 设置随机数种子,保证在不同电脑上运行时下面的输出一致
t.manual_seed(1000) 

def get_fake_data(batch_size=8):
    ''' 产生随机数据:y=x*2+3,加上了一些噪声'''
    x = t.rand(batch_size, 1, device=device) * 5
    y = x * 2 + 3 +  t.randn(batch_size, 1, device=device)
    return x, y
# 来看看产生的x-y分布
x, y = get_fake_data(batch_size=16)
plt.scatter(x.squeeze().cpu().numpy(), y.squeeze().cpu().numpy())

输出结果如下:


# 随机初始化参数
w = t.rand(1, 1).to(device)
b = t.zeros(1, 1).to(device)

lr =0.02 # 学习率 defalt 0.02

for ii in range(10000): # defalt 500
    x, y = get_fake_data(batch_size=4)
    
    # forward:计算loss
    y_pred = x.mm(w) + b.expand_as(y) # x@W等价于x.mm(w);for python3 only
    loss = 0.5 * (y_pred - y) ** 2 # 均方误差
    loss = loss.mean()
    
    # backward:手动计算梯度
    dloss = 1
    dy_pred = dloss * (y_pred - y)
    
    dw = x.t().mm(dy_pred)
    db = dy_pred.sum()
    
    # 更新参数
    w.sub_(lr * dw)
    b.sub_(lr * db)
    
    if ii%500 == 0:   # defalt 50
       
        # 画图
        display.clear_output(wait=True)
        x = t.arange(0, 6).view(-1, 1).float() # t.arange 输出结果为 LongTensor 所以需要转化为float 类型不然会报错
        y = x.mm(w) + b.expand_as(x)     
        plt.plot(x.cpu().numpy(), y.cpu().numpy()) # predicted
        
        x2, y2 = get_fake_data(batch_size=32) 
        plt.scatter(x2.numpy(), y2.numpy()) # true data
        
        plt.xlim(0, 5)
        plt.ylim(0, 13)
        plt.show()
        plt.pause(0.5)
        
print('w: ', w.item(), 'b: ', b.item())

输出结果如下,这是一个动态图,强烈建议自己跑一下,很直观的展示了收敛过程,此外也可以修改一下参数看看会有什么变化。


可见程序已经基本学出w=2、b=3,并且图中直线和数据已经实现较好的拟合。

相关文章

  • 机器学习系列(十六)——随机梯度下降Stochastic Gra

    随机梯度下降法Stochastic Gradient Descent 在之前的梯度下降法解决线性回归问题中,梯度向...

  • 2020-08-19--梯度下降法01

    梯度下降法简介 多元线性回归中的梯度下降法 随机梯度下降法 梯度下降法 的调试 1.梯度下降法简介 不是一个机器学...

  • 2019-01-29 随机梯度下降(stochastic gra

    随机梯度下降的思想也可以应用于线性回归、逻辑回归、神经网络或者其他依靠梯度下降来进行训练的算法中。 梯度下降法的问...

  • 使用随机梯度下降法进行线性回归

    线性回归是机器学习入门知识,应用十分广泛。线性回归利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量...

  • 多元线性回归

    实现了基于线性最小二乘、基于梯度下降法、基于随机梯度下降法的多元线性回归。计算中发现对一元回归,三者均有较高的R方...

  • 第2章 单变量&多变量线性回归

    单变量线性回归 梯度下降法 Gradient descent 用梯度下降法最小化代价函数J 多变量线性回归 mul...

  • (5)回归算法

    回归的模型均可抽象为多元线性回归,其优化方法一般为最小二乘法与梯度下降法等。一般选择使用梯度下降法求解,因为最小二...

  • 优化算法

    SGD 随机梯度下降法是梯度下降法的一个小变形,就是每次使用一批(batch)数据进行梯度的计算,而不是计算全部数...

  • 线性回归

    单变量线性回归 多变量线性回归 局限性 梯度下降法 优点 缺点 单变量线性回归 模型线性回归假设数据集中每个yi和...

  • 用人话讲明白梯度下降Gradient Descent(以求解多元

    文章目录1.梯度2.多元线性回归参数求解3.梯度下降4.梯度下降法求解多元线性回归 梯度下降算法在机器学习中出现频...

网友评论

      本文标题:使用随机梯度下降法进行线性回归

      本文链接:https://www.haomeiwen.com/subject/mqxfoqtx.html