pytorch深度学习基础 6(简单的参数估计学习1)

今天我们来学习一下简单的线性模型的参数估计

线性模型

一般形式

线性模型的一般形式如下:因此,只要 w 和 b 确定,模型就可以确定。线性回归试图学得f(xi)=wxi+bf(xi​)=wxi​+b,使得f(xi)≈yif(xi​)≈yi​。通过均方误差求得所有f(xi)f(xi​)和yiyi​之间距离(欧几里得距离)之和的最小(即最小二乘法),得到 w 和 b,即:根据数学上的知识,E(w,b)E(w,b)​实际上是一个凸函数,这就保证了通过对E(w,b)E(w,b)​两个变量分别求其偏微分,就可以得出满足条件的值。列出E(w,b)E(w,b)​分别对 w 和 b 的偏微分,并令其等于 0:这是针对样本xixi​是一维的情况,当样本为多维时,需要利用向量来计算。同样采用最小二乘法求解,在这里,将所有样本及标签写成向量的形式,方便计算:同样对w^w求导(用到向量求导)得到:当XTXXTX为满秩矩阵(可逆矩阵)时,上式可求得结果:令x^i=(xi;1)xi​=(xi​;1),则最终求得的多元函数模型为:当XTXXTX为奇异矩阵时,可以解出多个使得均方误差最小化的w^w,此时,会引入正则化项,来确定哪儿一个解作为输出。1

对数线性回归

将 y 变为ln⁡ylny,即得对数线性回归:也就是:前年说的都是预测的连续值,即标签是连续的。1

处理分类问题

要处理分类问题,对于二分类任务,其标签属于{0,1},通过线性模型产生的预测值z=wTx+bz=wTx+b,通过一个阶跃函数,就可以把 z 转换为{0,1}:但是阶跃函数不连续不可微,可以用 Sigmoid 函数(对数几率函数)来代替阶跃函数。将z=wTx+bz=wTx+b代入得:若将 y 视为样本作为正例的可能性,则 1 - y 是其成为反例的可能性,两者之比称为几率。反映样本作为正例的相对可能性。将此几率取对数,称为对数几率:对数几率回归求解的目标函数是任意阶可导凸函数,具有良好的数学性质。上式是关于ββ的高阶连续凸函数,根据凸优化理论,梯度下降和牛顿法均可以得到其最优解:线性判别分析(linear discriminant Anastasis,LDA):给定训练样例集,将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能的远离。对新样本进行分类时,投影到相同的直线上,根据投影点的位置来确定新样本的类别。多分类任务通常是将其拆分为多个二分类任务。这样配对的结果会产生N(N−1)/2N(N−1)/2个分类结果,即:最终,根据这些个分类器的结果进行投票,把预测的最多的分类作为最终的分类结果。一对其余(OvR):每次将一个样例作为正例,其余作为反例,这样会训练 N 个分类器。多对多(MvM):每次将若干个类作为正类,其余作为反类。MvM 的正反例构造必须有特殊的设计,不能随意选取,常用的技术为纠错输出码(ECOC)。步骤分为两步:编码:对 N 各类别做 M 次划分,每次划分将一部分类别化为正类,另一部分化为反类,从而形成一个二分类训练集,这样会产生 M 个训练集,训练处 M 个分类器。

首先我们人为规定一组随机的x,y的值来进行散点图的构建

import torch
import matplotlib.pyplot  as plt

y = [0.5, 14.0, 15.0, 28.0, 11.0, 8.0, 3.0, -4.0, 6.0, 13.0, 21.0]
x = [35.7, 55.9, 58.2, 81.9, 56.3, 48.9, 33.9, 21.8, 48.4, 60.4, 68.4]
y = torch.tensor(y)
x = torch.tensor(x)
# 创建图表
plt.figure()
plt.scatter(x, y)
plt.xlabel('t_u')
plt.ylabel('t_c')
plt.title('Scatter  plot of t_u vs t_c')
plt.show()

从这个散点图可以知道,这么多点之间还是存在线性关系的,现在呢我们需要通过设置一组参数,我们先拟定这条线性曲线为y=wx+b,此时我们可以不断改变w,b的参数值来进行得到预测的一组y组,然后将其进行与真实值进行均方根的计算,一组w,b得到的均方根最小,即是该组w,b的值越接近真实值

# 定义预测的线性模型 y = wx + b
def model(x, w, b):
    return w*x+b
# 定义损失函数

def loss_fn(t_p, y):
    squared_diffs = (t_p - y)**2
    return squared_diffs.mean()  # 返回均方差

# 初始化参数
w = torch.ones(())
b = torch.zeros(())

t_p = model(x, w, b)
print(t_p)
loss = loss_fn(t_p,y)
print(loss)

到此我们已经完成的模型的实现以及损失函数的实现,这里只是把简单的方法介绍给大家,并没有计算出最优的参数w,b。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值