做网站 微信开发前景,58同城租房,网站公司如何推广网站,驾校一点通网站怎么做简化的房价模型
假设1#xff1a;影响房价的关键因素时卧室个数#xff0c;卫生间和居住面积#xff0c;记为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3
假设2#xff1a;成交价时关键因素的加权和#xff1a; y w 1 x 1 w 2 x 2 w 3 x 3 b y w_1x_1w_2x_2w_3x…简化的房价模型
假设1影响房价的关键因素时卧室个数卫生间和居住面积记为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3
假设2成交价时关键因素的加权和 y w 1 x 1 w 2 x 2 w 3 x 3 b y w_1x_1w_2x_2w_3x_3b yw1x1w2x2w3x3b 权重和偏差的实际值在后面决定
范数 L p 范数 ∣ ∣ x ∣ ∣ p ( ∑ i 1 n ∣ x i ∣ p ) 1 p L_p范数||x||_p (\sum^n _{i1}|x_i|^p)^{\frac 1p}\\ Lp范数∣∣x∣∣p(i1∑n∣xi∣p)p1
常用的有 L 1 L_1 L1范数和 L 2 L_2 L2范数
L1 范数是指向量中各个元素绝对值之和也叫“稀疏规则算子”Lasso regularization。范数作为正则项会让模型参数θ稀疏化 既让模型参数向量里为0的元素尽量多。在支持向量机support vector machine学习过程中实际是一种对于成本函数(cost function)求解最优得出稀疏解。
L2 范数作为正则项式让模型参数尽量小但不会为0尽量让每个特征对预测值都有一些小的贡献得出稠密解。 在梯度下降算法的迭代过程中实际上是在成本函数的等高线上跳跃并最终收敛在误差最小的点上此处为未加正则项之前的成本误差。而正则项的本质就是惩罚。 模型在训练的过程中如果没有遵守正则项所表达的规则那么成本会变大即受到了惩罚从而往正则项所表达的规则处收敛。 成本函数在这两项规则的综合作用下正则化后的模型参数应该收敛在误差等值线与正则项等值线相切的点上。
一般的线性模型
n维输入 x [ x 1 , x 2 , ⋯ , x n ] T x[x_1,x_2,\cdots,x_n]^T x[x1,x2,⋯,xn]T
线性模型有一个n维权重和一个标量偏差 w [ w 1 , w 2 , ⋯ , w n ] T w [w_1,w_2,\cdots,w_n]^T w[w1,w2,⋯,wn]T
输出是输入的加权和 y w 1 x 1 w 2 x 2 ⋯ w n x n n yw_1x_1w_2x_2\cdotsw_nx_n n yw1x1w2x2⋯wnxnn
即 y w , x b yw,x b yw,xb 可以看作是单层的神经网络 衡量预估质量损失函数
比较真实值和预估值损失函数。
例如 y y y是真实值 y ^ \hat y y^是估计值则可以使用平方损失函数 l ( y , y ^ ) 1 2 ( y − y ^ ) 2 l(y,\hat y)\frac 12 (y-\hat y)^2 l(y,y^)21(y−y^)2
参数学习
将训练数据带入损失函数展开为 l ( X , y , w , b ) 1 2 n ∑ i 1 n ( y i − x i , w − b ) 2 1 2 n ∣ ∣ y − X w − b ∣ ∣ 2 l(X,y,w,b)\frac{1}{2n}\sum^n_{i1}(y_i-x_i,w-b)^2 \frac {1}{2n}||y-Xw-b||^2 l(X,y,w,b)2n1i1∑n(yi−xi,w−b)22n1∣∣y−Xw−b∣∣2 最小化损失来学习参数 w ∗ , b ∗ a r g m i n w , b l ( X , y , w , b ) w*,b* arg\ min_{w,b} l(X,y,w,b) w∗,b∗arg minw,bl(X,y,w,b)
优化方法
梯度下降 挑选一个初始值 w 0 w_0 w0 重复迭代参数 t 1 , 2 , 3 , ⋯ t1,2,3,\cdots t1,2,3,⋯ w t w t − 1 − α ∂ l ∂ w t − 1 w_t w_{t-1}-\alpha \frac{\partial l}{\partial w_{t-1}} wtwt−1−α∂wt−1∂l
沿梯度方向将增加损失函数值学习率步长的超参数不能太小和太大太小会导致计算太多次太大会迈过了在不停的振荡。 小批量随机梯度下降
在整个训练集上算梯度太贵一个深度神经网络模型可能需要数分钟到数小时
我们可以随机采样b个样本 i 1 , i 2 , ⋯ , i b i_1,i_2,\cdots,i_b i1,i2,⋯,ib来近似损失 1 b ∑ i ∈ I b l ( x i , y i , w ) \frac{1}{b}\sum_{i\in I_b} l(x_i,y_i,w) b1i∈Ib∑l(xi,yi,w) b是批量的大小另一个重要的超参数
批量大小也不能太小每次计算量太小不适合并行来最大利用计算资源不能太大内存消耗增加浪费计算例如如果所有样本都是相同的。
小批量梯度下降是深度学习默认的求解算法。
pytorch实现线性回归
import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l
from torch import nndef load_array(data_arrays, batch_size, is_trainTrue):构建一个PyTorch数据迭代器,随机挑选b个元素is_train表明是随机的dataset data.TensorDataset(*data_arrays)return data.DataLoader(datasetdataset, batch_sizebatch_size, shuffleis_train)true_w torch.tensor([2, -3.4])
true_b 4.2
features, labels d2l.synthetic_data(true_w, true_b, 1000) # 根据输入的两个参数wb生成1000个随机数据batch_size 10
data_iter load_array((features, labels), batch_size, is_trainFalse)# print(next(iter(data_iter)))net nn.Sequential(nn.Linear(2, 1)) # sequential是将层分为list of layers可以通过下标来访问不同的层
# Linear指使用神经网络的线性层模型输入有两个参数输出有一个参数net[0].weight.data.normal_(mean0, std0.01) # 将第一层的layer中的参数w设置为(0,0.01)的正态分布
net[0].bias.data.fill_(0) # 将偏差b设置为0均方误差MSEloss
loss nn.MSELoss()
SGD随机梯度下降
trainer torch.optim.SGD(net.parameters(), lr0.03) # 传入神经网络的所有参数学习率为0.03num_epochs 3
for epoch in range(num_epochs):for X, y in data_iter:l loss(net(X), y)trainer.zero_grad()#梯度清零l.backward()#计算梯度trainer.step()#更新模型l loss(net(features), labels)print(fepoch: {epoch1}, loss: {l:f})