零基础-动手学深度学习-3.1线性回归

目录

一、线性回归的基本元素

二、线性模型

三、损失函数

四、解析解

五、随机梯度下降

六、从线性回归到深度网络


仅当笔记本使用,鄙人为零基础转码博主,道行浅薄,请见谅~

一、线性回归的基本元素

        1.假设:自变量x与因变量y存在线性关系

        2.样本:数据点或者数据样本

        3.特征:预测所依据的协变量

        4.目标:标签或者目标

二、线性模型

        其实也就是初高中的回归模型演化,当然一个公式可能看起来并不是非常的明确,我没有写每个字母的具体含义,通常再机器学习中使用的都是高维数据集,因此wx实际上已经不是普通回归模型的简单乘法而是矩阵乘法的算法:

        意义就是向量x1,x2,实际上都是由多个特征组成的特征,这么说有点绕口,用最简单的例子来说,就是一个房子的价格取决于一个房子的大小,年龄,坐标等,然后去构建一个线性模型预测时需要考虑所有这些特征并乘以其权重(可能房子的大小会比其年龄更加重要?),然后得到一个输出也就是我们的目标值,这些值可以分开写,也可以直接用一个矩阵搞定。

三、损失函数

        损失函数这个东西就是预测值与实际值(来源于训练集)的偏差,衡量这个值有很多数学方法和定式,但是我们这里先用最熟悉的平方差:

        下面的公式就是把刚刚写的模型带入,我们要做的事情就明了了,寻找一组w(权重),b(偏差),使得我们的损失最小。

四、解析解

        解析解这里比较有趣,如果学习了吴恩达老师的机器学习我们可以进行这样的想象,在有非常多“山谷”的凹函数空间中,会有非常多的局部最优值,很难直接从数学上去解这样的最值,但是在线性回归问题中,这个凸函数由于太过简单,就只有一个局部最优值,因此我们讲能得到其一个最优解,就像我们高中得到的线性回归最佳ab值一样,我们可以写一个解析解出来:

        一开始我看到这个解析解是比较蒙的,因为作为生医废材我的线性代数实在时看不下去,所以我就进行了一点资料的查阅得出了这个结果,因为博主懒得写公式,我这里就简单写一下思想过程,首先展开损失函数为矩阵和矩阵转置相乘,然后对w求导,这里要先把展开的矩阵拆开,运用到二次型矩阵和常数矩阵与向量的求导法则,能得到一个比较简洁的形式,然后同时乘以(xtx)-1就可以了。

五、随机梯度下降

        随机梯度下降几乎可以说是在计算机上实现线性回归最核心的思想,这部分建议还是看看吴恩达老师的机器学习,但你可以进行想象,我们在去到达一个最低的loss值就是去寻找一群山的最低的山谷,当我们以目前眼前能看到,腿能迈出最大一步的方向,肯定要是最垂直下落的方式是最快的,因此我们运用高数中的梯度求解,以一定的步距朝着每次到达点的最垂直的方向走,肯定是以比较快的方式到达山谷,而且大概率不会瞎跑。

六、从线性回归到深度网络

为什么要学习线性回归,这和深度学习有什么关系?我觉得就用下面一张图来解释:

没错,线性回归就是一个单层的深度学习神经网络

### 使用深度学习线性回归模型实现加州房价预测 #### 3.1 准备环境与加载数据 为了使用Python中的`scikit-learn`库来进行线性回归分析以及利用`PyTorch`框架实施基于深度学习的方法,首先需要安装并导入必要的软件包。对于本案例而言,重点在于获取并预处理加州住房数据集。 ```python import numpy as np from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error import torch from torch.utils.data import TensorDataset, DataLoader import torch.nn as nn ``` 接着,加载加州房价的数据集,并将其划分为训练集和测试集: ```python data = fetch_california_housing() X = data['data'] y = data['target'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` #### 3.2 构建线性回归模型 通过调用`LinearRegression()`函数创建一个简单的线性回归模型实例,并对其进行拟合操作以适应给定的训练样本[^1]。 ```python linear_reg = LinearRegression().fit(X_train, y_train) # 对测试集做出预测 predictions_lr = linear_reg.predict(X_test) print(f'线性回归均方误差: {mean_squared_error(y_test, predictions_lr)}') ``` #### 3.3 实现基于PyTorch的简单神经网络 定义一个多层感知器结构用于执行相同的任务—即预测房屋的价格。这里采用两层全连接层的设计方案;同时考虑到输入特征的数量较多(共有8个),适当调整隐藏单元数可以提高性能表现。 ```python class MLP(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(8, 64) self.relu = nn.ReLU() self.fc2 = nn.Linear(64, 1) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out.flatten() device = "cuda" if torch.cuda.is_available() else "cpu" model = MLP().to(device=device) criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) dataset = TensorDataset(torch.tensor(X_train).float(), torch.tensor(y_train).float()) dataloader = DataLoader(dataset, batch_size=32, shuffle=True) for epoch in range(50): # 训练周期次数可以根据实际情况设定 for i, (inputs, labels) in enumerate(dataloader): inputs, labels = inputs.to(device), labels.to(device) outputs = model(inputs) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() with torch.no_grad(): predicted_values_dl = model(torch.tensor(X_test).float().to(device)).cpu().numpy() print(f'Deep Learning MSE Loss on Test Set: {mean_squared_error(y_test, predicted_values_dl)}') ``` 上述代码展示了两种不同方法的应用过程:传统机器学习技术下的线性回归模型以及现代深度学习领域内的多层感知机架构。两者都旨在解决同样的问题——根据历史记录估计未来可能发生的事件或趋势,在这里是针对房地产市场的价值评估[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值