线性回归
前言
没学的时候感觉非常高大上,公式看一眼就头疼,想走捷径看b站视频,发现推导也不怎么详细,就找了很多博客看,终于入门了。写本文的目的一是小白入门,二是练习LaTex。
1 概念
- 回归:指的是目标值为连续型,如房价数据集,预测房价是90.5,90.6…这些连续的数字。
- 分类:指的是目标值为离散型,如鸢尾花数据集,预测种类是第1,2,3这些类别。
- 线性:直线的性质
所以 线性回归 就是用直线完成预测。换句话说,线性回归 就是 找直线
图中的直线可以找到无数条,那谁是最好的那一条呢?出现了一个新概念,损失函数
损失函数
又叫误差函数,顾名思义,就是衡量误差的多少,拿它做标准,自然是损失函数最小直线最好。
而此处的误差 就是 实际值 - 预测值。预测值:直线上的值;实际值:那些点。
损失函数公式: ∑ i = 1 m ( y i − y ^ i ) 2 \sum_{i=1}^{m}({y_i - \hat{y}_i)^2} i=1∑m(yi−y^i)2 实际值 用 y y y,预测值 用 y ^ \hat{y} y^, i i i指的是第 i i i条数据
很明显,这是不开根号的欧氏距离求和,平方容易理解,(预测-实际)的结果有正有负嘛,平方去掉负号;而不开根号的原因是:平方后开根号,等价于 绝对值,绝对值不方便求导,比如 ∣ x ∣ |x| ∣x∣在0点无导数,而后面会对损失函数求导,所以不用。
已知 y i y_i yi,在labels里给出,比如下面表格中的:90.2、100.3等等;未知 y ^ i \hat{y}_i y^i ,然后给出预测值 y ^ i \hat{y}_i y^i 的公式
y ^ i = w 1 x i 1 + w 2 x i 2 + . . . w n x i n + b \hat{y}_i =w_1x_{i1} + w_2x_{i2} + ...w_nx_{in} + b y^i=w1xi1+w2xi2+...wnxin+b
其中,
w
1
,
w
2
.
.
.
w
n
w_1,w_2...w_n
w1,w2...wn都是不同属性
x
1
,
x
2
.
.
.
x
n
x_1,x_2...x_n
x1,x2...xn对应的权重。比如:
w
1
=
0.9
w_1 = 0.9
w1=0.9,
x
i
1
x_{i1}
xi1为第i条数据的房面积,说明房面积很重要,权重为0.9;其它诸如此类。
b是偏移量,要是没有它,你的那条线只能从0点过了,不够灵活
目的
到这里目的很明确了,就是要找到一组参数 w 1 , w 2 . . . w n w_1,w_2...w_n w1,w2...wn(又叫系数、权重),使得损失函数最小。常见的方法有两种
- 正规方程解(像天才一样,一步到位,直接算出W)
- 梯度下降(努力的普通人,不断试错,改进)
给个房价数据集表格,以便后面理解
x1 | x2 | … | xn | 无 | y |
---|---|---|---|---|---|
面积 | 楼层 | … | 地段 | 无 | 房价 |
100 | 2 | … | 6 | 1 | 90.2 |
… | … | … | … | … | … |
80 | 5 | … | 9 | 1 | 100.3 |
2 正规方程解 推导
但是 y ^ i \hat{y}_i y^i 这个式子 计算机不好处理,它擅长处理矩阵。所以,将这个式子化为向量内积的形式。 y ^ i = X i ∗ W \hat{y}_i = X_i * W y^i=Xi∗W , 即分解成:一行 × 一列
X
i
=
(
x
i
1
x
i
2
.
.
.
x
i
n
1
)
,
W
=
(
w
1
w
2
.
.
.
w
n
b
)
X_i = \begin{pmatrix}x_{i1} & x_{i2} & ...& x_{in} &1\\ \end{pmatrix}, W = \begin{pmatrix}w_1 \\ w_2 \\ ...\\ w_n\\ b \end{pmatrix}
Xi=(xi1xi2...xin1),W=⎝⎜⎜⎜⎜⎛w1w2...wnb⎠⎟⎟⎟⎟⎞
X
i
X_i
Xi 表示第
i
i
i 条数据,1到n代表每一条数据中1到n个属性
比如:
i
=
1
,
X
i
i = 1 , X_i
i=1,Xi = 第一行数据;
x
i
1
=
100
x_{i1} =100
xi1=100,第一行第一个属性值;
x
i
2
=
2
x_{i2}=2
xi2=2,第一行第二属性值…(看上面表格)
上面看的是第
i
i
i 条数据,现在考虑 m 条数据:
X
b
=
(
x
11
x
12
.
.
.
x
1
n
1
x
21
x
22
.
.
.
x
2
n
1
.
.
.
x
m
1
x
m
2
.
.
.
x
m
n
1
)
X_b = \begin{pmatrix}x_{11} & x_{12} & ...& x_{1n} &1\\ x_{21} & x_{22} & ...& x_{2n} &1\\...\\x_{m1} & x_{m2} & ...& x_{mn} &1 \end{pmatrix}
Xb=⎝⎜⎜⎛x11x21...xm1x12x22xm2.........x1nx2nxmn111⎠⎟⎟⎞
m*n矩阵,m条数据,n个特征属性
那公式就从第 i 条数据的预测值
y
^
i
=
X
i
∗
W
\hat{y}_i = X_i * W
y^i=Xi∗W
拓展成了 m条数据的预测值
y
^
=
X
b
∗
W
\hat{y} = X_b * W
y^=Xb∗W
还记得损失函数的公式嘛,把它分解一下
∑
i
=
1
m
[
y
i
−
y
^
i
]
2
=
(
y
1
−
y
^
1
,
y
2
−
y
^
2
,
.
.
.
,
y
m
−
y
^
m
)
(
y
1
−
y
^
1
y
2
−
y
^
2
.
.
.
y
m
−
y
^
m
)
\sum_{i=1}^{m}[{y_i - \hat{y}_i]^2} = (y_1-\hat{y}_1, y_2-\hat{y}_2,...,y_m-\hat{y}_m)\begin{pmatrix}y_1-\hat{y}_1 \\ y_2-\hat{y}_2 \\ ...\\ y_m-\hat{y}_m \end{pmatrix}
i=1∑m[yi−y^i]2=(y1−y^1,y2−y^2,...,ym−y^m)⎝⎜⎜⎛y1−y^1y2−y^2...ym−y^m⎠⎟⎟⎞
设
U
=
(
y
1
−
y
^
1
y
2
−
y
^
2
.
.
.
y
m
−
y
^
m
)
=
(
y
1
y
2
.
.
.
y
m
)
−
(
y
^
1
y
^
2
.
.
.
y
^
m
)
=
y
−
y
^
设 U = \begin{pmatrix}y_1-\hat{y}_1 \\ y_2-\hat{y}_2 \\ ...\\ y_m-\hat{y}_m \end{pmatrix} = \begin{pmatrix}y_1 \\ y_2 \\ ...\\ y_m\end{pmatrix} - \begin{pmatrix}\hat{y}_1 \\ \hat{y}_2 \\ ...\\ \hat{y}_m \end{pmatrix} = y-\hat{y}
设U=⎝⎜⎜⎛y1−y^1y2−y^2...ym−y^m⎠⎟⎟⎞=⎝⎜⎜⎛y1y2...ym⎠⎟⎟⎞−⎝⎜⎜⎛y^1y^2...y^m⎠⎟⎟⎞=y−y^
y
与
y
^
均
已
知
y与 \hat{y} 均已知
y与y^均已知 ,上述方程可变为
U
T
U
U^TU
UTU
∑
i
=
1
m
[
y
i
−
y
^
i
]
2
=
U
T
U
=
(
y
−
y
^
)
T
(
y
−
y
^
)
=
(
y
−
X
b
W
)
T
(
y
−
X
b
W
)
=
(
y
T
−
W
T
X
b
T
)
(
y
−
X
b
W
)
=
y
T
y
−
y
T
X
b
W
−
W
T
X
b
T
y
+
W
T
X
b
T
X
b
W
\sum_{i=1}^{m}[{y_i - \hat{y}_i]^2} = U^TU = (y-\hat{y})^T(y-\hat{y}) \\ =(y-X_bW)^T(y-X_bW)\\ =(y^T-W^TX_b^T)(y-X_bW)\\\\= y^Ty - y^TX_bW-W^TX_b^Ty + W^TX_b^TX_bW
i=1∑m[yi−y^i]2=UTU=(y−y^)T(y−y^)=(y−XbW)T(y−XbW)=(yT−WTXbT)(y−XbW)=yTy−yTXbW−WTXbTy+WTXbTXbW
y T = 1 ∗ m , X b = m ∗ ( n + 1 ) , W = ( n + 1 ) ∗ 1 y^T = 1*m ,X_b = m * (n+1), W = (n+1)*1 yT=1∗m,Xb=m∗(n+1),W=(n+1)∗1
y
T
X
b
W
y^TX_bW
yTXbW这个算出来是个1*1的矩阵,就是个数字,很明显
W
T
X
b
T
y
W^TX_b^Ty
WTXbTy是它的转置,那也是个同样的数字。所以上式继续推:
=
y
T
y
−
2
y
T
X
b
W
+
W
T
X
b
T
X
b
W
=y^Ty -2y^TX_bW + W^TX_b^TX_bW
=yTy−2yTXbW+WTXbTXbW
到这里就行了,注意我们的目标始终是使损失函数最小的 那组W
如果让你求
y
=
a
x
2
+
b
x
+
c
y = ax^2 + bx + c
y=ax2+bx+c 的最小值,一般步骤是求导,然后看导数为0的点是否符合最小。 这里也是一样,不同的是此处对矩阵求导,令其为0。
这里给个两个书上的公式,就不介绍了
∇ w T x = w \nabla w^Tx = w ∇wTx=w (公式1)
∇ x T A x = 2 A x \nabla x^TAx = 2Ax ∇xTAx=2Ax(公式2)
这两个式子是对 x ⃗ \vec{x} x求导,下面是对 W ⃗ \vec{W} W求导
此部分 对W求导
y
T
y
−
2
y
T
X
b
W
+
W
T
X
b
T
X
b
W
\boxed{y^Ty} -2y^TX_bW + W^TX_b^TX_bW
yTy−2yTXbW+WTXbTXbW,结果为0
此部分 用公式1求导
y
T
y
−
2
y
T
X
b
W
+
W
T
X
b
T
X
b
W
y^Ty \boxed{-2y^TX_bW} + W^TX_b^TX_bW
yTy−2yTXbW+WTXbTXbW,结果为
−
2
X
b
T
y
-2X_b^Ty
−2XbTy
此部分 用公式2求导
y
T
y
−
2
y
T
X
b
W
+
W
T
X
b
T
X
b
W
y^Ty -2y^TX_bW + \boxed{W^TX_b^TX_bW}
yTy−2yTXbW+WTXbTXbW,结果为
2
X
b
T
X
b
W
2X_b^TX_bW
2XbTXbW
令结果等于0,得到
2
X
b
T
X
b
W
−
2
X
b
T
y
=
0
即
X
b
T
X
b
W
=
X
b
T
y
W
=
(
X
b
T
X
b
)
−
1
(
X
b
T
y
)
2X_b^TX_bW-2X_b^Ty = 0\\即X_b^TX_bW = X_b^Ty\\ W = (X_b^TX_b)^{-1}(X_b^Ty)
2XbTXbW−2XbTy=0即XbTXbW=XbTyW=(XbTXb)−1(XbTy)
推导完毕!
LaTex真难敲啊,但样式确实好看~
3 参考文章:
https://blog.csdn.net/alw_123/article/details/82193535
https://blog.csdn.net/alw_123/article/details/82825785
https://blog.csdn.net/alw_123/article/details/83065764