02Linear Model

学习b站刘二大人的《pytorch深度学习实践》,其实不是第一次学了。但是之前看了之后没有持续的使用,已经忘记了。现在回头速刷一遍。顺便做个记录,再用自己的方式改写一些代码。
视频链接:https://www.bilibili.com/video/BV1Y7411d7Ys?t=744&p=3

监督学习范式

  • 1。划分数据集,训练集和测试集、验证集。在训练集上学习模型,在测试集上评估模型的性能,在验证集上做模型的选择和调参。但很多时候,数据集很小。往往只分成训练集和测试集。
  • 2。如下图,我们现在的任务是学习4小时,应该取得多少分数?
  • 3。在这一讲中,用的是枚举的方式寻找最优参数,代码如下,实际任务中根本不可能枚举。
  • 4。而在深度学习方法中,应用最广泛的是梯度下降法,以此方法寻找到最佳权重参数。
  • 5。本讲使用的模型是线性模型:

Y = W X Y =WX Y=WX

Alt

  • 6。使用的是均方误差来衡量损失。
    L o s s = 1 n ( Y _ p r e − Y _ t u r e ) 2 Loss = \frac{1}{n}(Y\_{pre}-Y\_ture)^2 Loss=n1(Y_preY_ture)2

代码实践

import numpy as np
import matplotlib.pyplot as plt

x_data = np.array([1.0, 2.0, 3.0])
y_data = np.array([2.0, 4.0, 6.0])

def forward(x,w):
    '线性模型:y_pred = w * x'
    return x * w
def loss(x,y,w):
    '损失:loss=(y_pred-y)**2'
    y_pred = forward(x,w)
    return sum((y_pred - y) ** 2)/3
# 枚举求权重
Loss = []
for w in np.arange(0.0,4.1,0.1):
    l = loss(x_data,y_data,w)
    # print('权重w-->%f,平均平方损失loss-->%f'%(w,l))
    Loss.append((w,l))
Loss = np.array(Loss)

fig = plt.figure(figsize=(10,5.5),dpi=100)
plt.plot(Loss[:,0],Loss[:,1])
plt.show()

实验结果

Alt

获取最优权重

#获得最优权重,利用最优权重做预测
import pandas as pd

L = pd.DataFrame(Loss,columns=['权重','损失'])
L = L.sort_values(by='损失')
#获得最优权重
best_w = L.iloc[0,0]
best_w # 2

利用最优权重对测试数据做预测

x = 4.0
def forward(x,w):
    '线性模型:y_pred = w * x'
    return x * w
forward(x,best_w) # 8

本讲小结

  • 1,引入了一些机器学习的及其概念,如过拟合、欠拟合、训练集、测试集、验证集。度量模型的好坏–损失函数等等,更详细的机器学习基础可以看李航–机器学习方法;
  • 2,介绍了最基础的线性模型,其中线性模型的最小二乘法,概率论讲得很清楚了。但凡回归预测模型,基本都离不开最小二乘法,也就是用平方损失或均方损失来进行误差反向传播,更新权重。

作业

在这里插入图片描述

  • 线性模型多一个偏置项。绘制出损坏随着权重w和偏置b的曲线图,如上图,是一个3d模型。
  • 本节所用的寻找权重的办法就是穷举法,多了一个偏置b后,就多了一个循环。代码如下。
import numpy as np
import matplotlib.pyplot as plt

x_data = np.array([1.0, 2.0, 3.0])
y_data = np.array([2.0, 4.0, 6.0])

def forward(x,w,b):
    '线性模型:y_pred = w * x + b'
    return x * w + b
def loss(x,y,w,b):
    '损失:loss=(y_pred-y)**2'
    y_pred = forward(x,w,b)
    return sum((y_pred - y) ** 2)/3
# 枚举求权重与偏置
Loss = []
w_list = np.arange(0.0,4.1,0.5)
b_list = np.arange(-2,2.1,0.5)
for w in w_list:
    for b in b_list:
        l = loss(x_data,y_data,w,b)
        # print('权重w-->%f,平均平方损失loss-->%f'%(w,l))
        Loss.append((w,b,l))
Loss = np.array(Loss)

# 网格化矩阵
x, y = np.meshgrid(w_list, b_list)
mse = np.reshape(Loss[:,2],(9,9))

# 画图
ax = plt.figure().add_subplot(projection='3d')
ax.plot_surface(x, y, mse, linewidth=0.2,
                       antialiased=True,cmap=plt.get_cmap('rainbow'))
plt.show()

实验结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值