线性回归
今天看了关于线性回归的内容,说实话还是不懂,书上给了一大堆公式也只能看懂公式之间的推导,实际要怎么使用这些公式还是不明白。。。总之先记一下部分内容吧。
线性模型就是在给定的多个点,找到一个函数使得此函数线与各数据点之间的距离总体上呈最接近的状态,简单的说就是在一堆数据点中找到一条直线尽可能与这些点接近。
线性模型表示为:
f
(
x
)
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
.
.
.
+
w
d
x
d
+
b
f(x) = w_1x_1 + w_2x_2 + w_3x_3 + ...+w_dx_d + b
f(x)=w1x1+w2x2+w3x3+...+wdxd+b
向量形式为:
f
(
x
)
=
w
T
+
b
f(x) = w^T + b
f(x)=wT+b
线性回归要做的就是不断的调整w和b。
- 一维线性回归
一维线性回归中数据集只有一种属性,即w只有一种值。
为了调整w和b,我们需要有一个指标,这里选择使用f(x)与y的距离差值,均方误差:
L o s s = ∑ i = 1 m ( f ( x i ) − y i ) 2 Loss = \sum_{i=1}^{m}(f(x_i)-y_i)^2 Loss=i=1∑m(f(xi)−yi)2
通过这个公式便可以计算w与b。 - 多维线性回归
多维线性回归就是有d个属性的数据集,他依然使用均方误差作为评判标准,不过需要有d个这样的公式(我自己的理解,有错误希望大佬指出),也可以合在一起形成一个矩阵公式。
尝试花了一下矩阵结果失败了,直接最后吧
线性回归模型写成:
f ( x i ) = x i T ( X T X ) − 1 X T y f(x_i)=x_i^T(X^TX)^-1X^Ty f(xi)=xiT(XTX)−1XTy
PyTorch进行一维线性回归
x_train = np.array([[1,1],[2,2],[3,3]], dtype = np.float32)
y_train = np.array([[4,4],[5,5],[6,6]], dtype = np.float32)
x_train = torch.from_numpy(x_train)#转化为张量
y_train = torch.from_numpy(y_train)
#线性回归模型
class LinearRegression(nn.Module):
def __init__(self):
super(LinearRegression, self).__init__()
self.linear = nn.linear(1, 1)#输入输出均为一维
def forward(self, x):
out = self.linear(x)
return out
model = LinearRegression()
#定义损失函数,优化函数
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=le-3)
#模型训练
num_epochs = 1000
for epoch in range(num_epoche):
inputs = Variable(x_train)#转化为变量
target = Variable(y_train)
out = model(inputs)#通过模型得到前向传播的结果
loss = criterion(out, target)#损失函数
optimzer.zero_grad()#归零梯度
loss.backward()#反向传播
optimizer.step()#更新参数
多维线性回归的实现与一维相似,只是模块定义时不再是的输入1维数据。倒是书上训练数据的产生还是看不懂,这矩阵是怎么来的,真实函数又是啥。。。怀疑我是不是少看了一章QAQ