Pytorch_线性回归问题

0 | 系列公式

图1 线性模型公式
图2 带有噪声的线性模型公式
图3 loss function 函数
图4 优化目标函数

1.使用numpy构造带有随机噪声的线性模型公式(图2所示)

import numpy as np
X = 2*np.random.rand(100,1)
Y = 4+3*X + np.random.randn(100,1)  # y=4+3x+高斯噪声

2.使用matplotlib可视化

import matplotlib.pyplot as plt
plt.plot(X,Y,'bo')
plt.xlabel('$x_1$',fontsize = 18)
plt.ylabel('$Y$',fontsize = 18)
plt.axis([0,2,0,15])
plt.show()

图5 X,Y数据的分布情况(比较接近y=3x+4)

3.我们利用(y=3x+4+高斯噪声)构造出X,Y的值

我们利用线性回归原理,假设y=wx+b, 利用梯度下降法,去求解w,b。验证w,b是否比较接近w=3,b=4

# 计算loss_function函数
'''
loss = sum(y-(w*x+b))**2
'''
#定义loss_functiondef computre_error_loss_function(b, w, X, Y):    totalError = 0  # 初始error设置为0
    for i in range(0,len(X)):
        x = X[i]        
        y = Y[i]        
        totalError = totalError + (y - (w*x+b))**2 #计算所有样本的Error
    return totalError/float(len(X)) #返回平均Error
def compute_grad(b_cal, w_cal, X,Y, learn_rate):
    b_grad = 0  #初始b的导数值 
    w_grad = 0  #初始w的导数值
    N = float(len(X))
    
    for i in range(0,len(X)):
        x,y = X[i],Y[i]
        
        b_grad = -(2/N)*(y-((w_cal*x) + b_cal)) + b_grad  #对b求导公式
        w_grad = -(2/N)*x*(y-((w_cal*x)+b_cal)) + w_grad  #对w求导公式
        
    new_b = b_cal-(learn_rate*b_grad)         #梯度更新
    new_w = w_cal-(learn_rate*w_grad)         #梯度更新
    return [new_b, new_w]                    #返回参数权值
# 运行每个样本的梯度更新
def GD_runner(X,Y,starting_b,starting_w,learn_rate, num_iter):
    b = starting_b
    w = starting_w
    for i in range(num_iter):
        b,w = compute_grad(b,w, X,Y, learn_rate)
    return [b,w] 
def run():
    #设置超参数
    learn_rate = 0.001 # 设置学习率
    init_b =0          #初始值
    init_w =0  
    num_iter = 100000  #设置迭代次数
    
    print('初始梯度参数:b={0},w={1},error ={2}'.format(init_b,init_w,computre_error_loss_function(init_b,init_w,X,Y))
         )
    print('Runing...')
    [b,w] = GD_runner(X,Y,init_b,init_w, learn_rate, num_iter)
    print('迭代次数:iter={0},b={1},w={2},error={3}'.format(num_iter,b,w,computre_error_loss_function(b,w,X,Y))
    )
if __name__ == '__main__':
    run()

图6 迭代结果
从图6的结果来看,b=4.16,w=2.81,Error=1.14,即使用梯度下降法求得 y=4.14+2.81*x,

这与原先的y=4+3*x+随机噪声(图2公式)的函数比较接近。

关联知识点:
Pytorch_线性回归问题

线性回归的原理及其实现

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页