线性回归
1 一元线性回归
线性回归具有如下性质
y = x[0]w[0]+x[1]w[1]+…+x[m-1]w[m-1]+w[m]
其中w[0],w[1]…w[m-1],w[m]是m+1个权重值
线性回归是假设自变量和因变量之间的关系有这样子的形式,再利用数据确定出这m+1个权重值,最终找到自变量和因变量之间的关系。
1.1 最小二乘法
最小二乘法(Linear Least Squares, LLS) 是一种最基本的线性回归方法。在最小二乘回归中,有n条数据,每条数据有m个自变量数值x[i,0],x[i,1],…x[i,m-1]和一个因变量数值y[i],0<=i<n,一般情况下n>>m,即数据的条目远大于自变量的个数,因变量的个数等于数据的条目。在机器学习领域,数据条目中的自变量的数值又称为 “特征”(feature) ,因变量的数值成为标签(label)。用张量记号,可以把所有的数据条目的特征和标签分别记为一个张量。
如果特征和标签之间完全由W指定的线性关系精确确定,则有y[i,:] = X[i,:]·W。若以上等式对所有条目都成立,则有Y = X·W
。线性回归,就是试图找到权重值W,使得Y和X·W尽可能接近。
最小二乘法用均方误差(Mean Squared Error,MSE),表示Y和XW的接近程度,均方差的表达式为:
PyTorch中的函数torch.lstsq() 实现了最小二乘法。这个函数有两个参数,分别对应了MSE里的张量Y和X。这个函数有两个返回值,前一个返回值包括了所有的权重值,后一个返回值是QR分解的结果。当X的大小为 (n,m+1) ,Y的大小为 (n,),这个返回值是一个大小为 (n,1) 的张量(这是个 二维张量)。取这个张量的 前m+1 个元素,可以得到大小为 (m+1,) 的张量w。(这个张量的其他元素是表示残差的量,平方和就是MSE的值)
demo
import torch
x = torch.tensor([[1., 1., 1.], [2., 3., 1., ], [
3., 5., 1., ], [4., 2., 1.], [5., 4., 1.]])
y = torch.tensor([-10., 12., 14., 16., 18., ])
wr, _ = torch.lstsq(y, x)
w = wr[:3]
print(w)
1.2 正规方程法
正规方程(normal equation) 法是最常见的求解最小二乘法的方法。推导过程略。
正规方程表达式:
方程的解:
2 多元线性回归
多元线性回归试图讨论自变量与多个因变量之间的关系。我们可以逐一考虑自变量和每一个因变量之间的关系,建立多个线性回归问题来求解。但是我们也可以将多个线性回归问题合并成一个问题来一次求解
设自变量有m 个(不包括常数1),因变量有c个,则特征张量 X的大小为 (n,m+1),标签张量Y的大小为 (n,c),这时候的权重张量的大小为(n,c),用torch.lstsq()求解同一元线性回归。
demo
import torch
x = torch.tensor([[1, 1, 1], [2, 3, 1], [3, 5, 1], [
4, 2, 1], [5, 4,