本文主要是介绍【林轩田】机器学习基石(九)——线性回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ppt
video
Lecture 9: Linear Regression 线性回归
9.1 Linear Regression Problem 线性回归问题
考虑一个问题,银行按照每个顾客的个人情况,赋予不同的信用额度。我们可不可以通过机器学习,学到一个赋予信用额度的比较好的方式呢?
信用额度是一个实数,所以输出 y ∈ R y \in R y∈R,属于回归问题。
这里介绍最简单的一种,即线性回归:
对 x x x的每一个维度特征 x i x_i xi赋予一个权重 w i w_i wi表示重要程度,再求和,得到 y y y,这是线性回归的基本思想。
得到的 h ( x ) h(x) h(x)类似于我们之前学到的感知器算法,但是没有添加符号 s i g n sign sign这个步骤。
线性回归的几何表示如上图,寻找最优的 h ( x ) h(x) h(x)实际上是寻找最优的线或者超平面。
线性回归算法中,我们普遍使用“squared error”的错误度量方式。
9.2 Linear Regression Algorithm 线性回归算法
上面一小节,关于线性回归的演算法公式,我们已经介绍清楚了。
接下来,我们需要考虑的问题是,如何计算 E i n E_{in} Ein的最小值。
在推导之前,我们先来复习一下向量和矩阵的一些相关运算。
向量、矩阵运算
向量的内积
- a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ ⋅ c o s ( a ⃗ , b ⃗ ) \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot cos(\vec{a},\vec{b}) a⋅b=∣a∣⋅∣b∣⋅cos(a,b)
- b ⃗ ⋅ a ⃗ = ∣ b ⃗ ∣ ⋅ ∣ a ⃗ ∣ ⋅ c o s ( b ⃗ , a ⃗ ) \vec{b} \cdot \vec{a} = |\vec{b}| \cdot |\vec{a}| \cdot cos(\vec{b},\vec{a}) b⋅a=∣b∣⋅∣a∣⋅cos(b,a)
- 所以, a ⃗ ⋅ b ⃗ = b ⃗ ⋅ a ⃗ \vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a} a⋅b=b⋅a,向量的内积符合交换律。
矩阵的行列式计算
-
只有方针才有行列式值。
-
二阶行列式计算如下:
∣ D ∣ = d e t ( A ) = d e t ( ∣ a 11 a 12 a 21 a 22 ∣ ) = a 11 a 22 − a 21 a 12 |D| = det(A) = det(\begin{vmatrix} a_{11}&a_{12}\\ a_{21}&a_{22} \end{vmatrix}) = a_{11}a_{22} - a_{21}a_{12} ∣D∣=det(A)=det(∣∣∣∣a11a21a12a22∣∣∣∣)=a11a22−a21a12 -
奇排列:逆序数为奇数的排列
-
偶排列:逆序数为偶数的排列
-
例如: 123 123 123共有 3 ∗ 2 ∗ 1 = 6 3*2*1=6 3∗2∗1=6种排列方式,其中 132 132 132逆序数为1,为奇排列; 231 231 231逆序数为2,为偶排列。
-
三阶行列式计算如下:
∣ D ∣ = d e t ( A ) = d e t ( ∣ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ∣ ) = a 11 a 22 a 33 + a 12 a 23 a 31 + a 13 a 21 a 12 − a 11 a 23 a 31 − a 13 a 22 a 31 − a 12 a 21 a 33 |D| = det(A) = det(\begin{vmatrix} a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33} \end{vmatrix}) \\ = a_{11}a_{22}a_{33}+a_{12}a_{23}a_{31}+a_{13}a_{21}a_{12} - a_{11}a_{23}a_{31} - a_{13}a_{22}a_{31} - a_{12}a_{21}a_{33} ∣D∣=det(A)=det(∣∣∣∣∣∣a11a21a31a12a22a32a13a23a33∣∣∣∣∣∣)=a11a22a33+a12a23a31+a13a21a12−a11a23a31−a13a22a31−a12a21a33
可以看出偶排列前面符号为正号,奇排列前面符号为负号。 -
所以,三阶行列式可写成
∣ D ∣ = ∑ p 1 p 2 p 3 ( − 1 ) τ ( p 1 p 2 p 3 ) a 1 p 1 a 2 p 2 a 3 p 3 |D| = \sum_{p_{1}p_{2}p_{3}} {(-1)^{\tau(p1p2p3)}a_{1p1}a_{2p2}a_{3p3}} ∣D∣=p1p2p3∑(−1)τ(p1p2p3)a1p1a2p2a3p3
其中, τ ( p 1 p 2 p 3 ) \tau(p1p2p3) τ(p1p2p3)代表排列的逆序数, p 1 p 2 p 3 p1p2p3 p1p2p3代表所有排列。 -
扩展到 n n n阶行列式,
∣ D ∣ = ∑ p 1 p 2 . . . p n ( − 1 ) τ ( p 1 p 2... p n ) a 1 p 1 a 2 p 2 . . . a n p n |D| = \sum_{p_{1}p_{2}...p_{n}} {(-1)^{\tau(p1p2...pn)}a_{1p1}a_{2p2}...a_{npn}} ∣D∣=p1p2...pn∑(−1)τ(p1p2...pn)a1p1a2p2...anpn
一共有 n ! n! n!项 -
计算是这样计算的,但是行列式的本质是什么呢?可以看知乎这篇回答:
https://www.zhihu.com/question/36966326
我看了之后也不太懂,但有个结论说:行列式是线性变换的伸缩因子.。 -
d e t ( A ) > 1 det(A) > 1 det(A)>1,这个矩阵在线性变换中有放大作用
-
d e t ( A ) = 1 det(A)=1 det(A)=1,面积不变
-
0 < d e t ( A ) < 1 0<det(A)<1 0<det(A)<1,面积减小
-
d e t ( A ) = 0 det(A) = 0 det(A)=0,图形降维,矩阵不可逆
-
d e t ( A ) < 0 det(A)<0 det(A)<0,转…无法理解暂时,待填坑。
希望之后能理解吧,现在是真的理解不了。
矩阵的转置
- 将原矩阵的行与列交换后得到的矩阵叫做转置矩阵。
- 直观地看,它是将矩阵 A A A的所有元素绕着一条从第1行第1列元素出发的右下方45度射线做镜面翻转,即得到 A A A的转置。
- 相关性质: ( A ± B ) T = A T ± B T (A \pm B)^{T} = A^{T} \pm B^{T} (A±B)T=AT±BT
- ( A ∗ B ) T = B T ∗ A T (A * B)^{T} = B^{T} * A^{T} (A∗B)T=BT∗AT
- ( A T ) T = A (A^T)^T = A (AT)T=A
- ( K A ) T = K ∗ A T (KA)^T = K*A^T (KA)T=K∗AT
矩阵的奇异性
奇异矩阵的英文叫做singular matrix,意思为异常的矩阵。
实际上他就是非可逆矩阵,不满秩矩阵,行列式为0的矩阵。
减小 E i n E_{in} Ein
第一步是将 E i n ( w ) E_{in}(w) Ein(w)改造成矩阵形式。
- w T x n = x n T w w^Tx_n = x_n^Tw wTxn=xnTw 成立的原因:
-
首先 A T B A^TB ATB一般情况下式不等于 B T A B^TA BTA的,推导如下:
由矩阵转置定理 ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT,得
( A T B ) T = B T ( A T ) T = B T A (A^TB)^T = B^T(A^T)^T = B^TA (ATB)T=BT(AT)T=BTA
即 ( A T B ) T = B T A (A^TB)^T = B^TA (ATB)T=BTA,
如果此时增加条件 A T B = B T A A^TB = B^TA ATB=BTA,即 ( A T B ) T = A T B (A^TB)^T = A^TB (ATB)T=ATB,
就是说 A T B A^TB ATB是以左上-右下45度对角线镜面对称的方阵。
即只有矩阵 M M M是45度镜面对称时,其转置等于它本身。 -
假设输入 x x x有 d d d维特征, w = ∣ w 0 w 1 w 2 . . . w d ∣ w = \begin{vmatrix} w_{0}\\ w_{1}\\w_2\\...\\w_d \end{vmatrix} w=∣∣∣∣∣∣∣∣∣∣w0w1w2...wd∣∣∣∣∣∣∣∣∣∣是列向量,一个 ( d + 1 ) ∗ 1 (d+1)*1 (d+1)∗1的矩阵, x n = ∣ x n 0 x n 1 . . . x n d ∣ x_n = \begin{vmatrix} x_{n0}\\x_{n1}\\...\\x_{nd}\end{vmatrix} xn=∣∣∣∣∣∣∣∣xn0xn1...xnd∣∣∣∣∣∣∣∣是列向量,也是一个 ( d + 1 ) ∗ 1 (d+1)*1 (d+1)∗1的矩阵。 w T x n w^Tx_n wTxn就是 [ 1 ∗ ( d + 1 ) ] ∗ [ 1 ∗ ( d + 1 ) ] [1*(d+1)]* [1*(d+1)] [1∗(d+1)]∗[1∗(d+1)]也就是维度为 1 ∗ 1 1*1 1∗1的矩阵,即一个实数,它必然是镜面对称的。所以 w T x n = x n T w w^Tx_n = x_n^Tw wTxn=xnTw成立。
-
- 将平方求和改造成向量模的平方:
- 假设我们有个向量 v ⃗ = { v 1 , v 2 , v 3 } \vec{v} = \{v_1,v_2,v_3\} v={v1,v2,v3}, ∣ v ⃗ ∣ 2 = v 1 2 + v 2 2 + v 3 2 |\vec{v}|^2 = {v_1}^2 + {v_2}^2+{v_3}^2 ∣v∣2=v12+v22+v32
- 同理 ∑ n = 1 N ( x n T w − y n ) 2 = ∣ x 1 T w − y 1 x 2 T w − y 2 . . . x N T w − y N ∣ 2 \sum_{n=1}^N(x_n^Tw-y_n)^2 = \begin{vmatrix} x_1^Tw-y_1\\ x_2^Tw-y_2\\...\\x_N^Tw-y_N\end{vmatrix}^2 n=1∑N(xnTw−yn)2=∣∣∣∣∣∣∣∣x1Tw−y1x2Tw−y2...xNTw−yN∣∣∣∣∣∣∣∣2
- 矩阵的线性变换
- 根据矩阵的加减法,加减的线性变换是显而易见的。即令 Y = ∣ y 1 y 2 . . . y N ∣ Y = \begin{vmatrix} y_1\\y_2\\...\\y_N\end{vmatrix} Y=∣∣∣∣∣∣∣∣y1y2...yN∣∣∣∣∣∣∣∣
- 根据矩阵的乘法,将 x n T w x_n^Tw xnTw的 w w w项拆出来,即新的 X = ∣ x 1 T x 2 T . . . x N T ∣ X = \begin{vmatrix} x_1^T\\x_2^T\\...\\x_N^T\end{vmatrix} X=∣∣∣∣∣∣∣∣x1Tx2T...xNT∣∣∣∣∣∣∣∣,行列数为 [ N ∗ ( d + 1 ) ] [N*(d+1)] [N∗(d+1)]
最终, E i n ( w ) E_{in}(w) Ein(w)的矩阵形式为
E i n ( w ) = 1 N ∣ ∣ X w − Y ∣ ∣ 2 E_{in}(w) = \frac{1}{N}||Xw-Y||^2 Ein(w)=N1∣∣Xw−Y∣∣2
第二步,探索 E i n ( w ) E_{in}(w) Ein(w)的图像走势,寻找使其最小的 w w w
我们把这个 E i n ( w ) E_{in}(w) Ein(w)看成以 w w w为自变量的二次函数, 这个函数是连续的,可微分的,凸函数。这样的函数肯定存在极值点,这个极值点的的梯度为0。
林教授解释梯度很形象,他说当一个球到达凸函数的谷底,它往哪个方向都滚不动,梯度定义如上图,对函数的每个方向(变量)作偏微分。哪里都滚不动,我们就说各个方向的偏微分即梯度为0。
所以我们的任务是找到使得函数梯度为0的 w w w向量。
拆平方,扩写 E i n ( w ) E_{in}(w) Ein(w)
E i n ( w ) = 1 N ∣ ∣ X w − Y ∣ ∣ 2 = 1 N ∣ ∣ ( X w − Y ) T ( X w − Y ) ∣ ∣ E_{in}(w) = \frac{1}{N}||Xw-Y||^2 = \frac{1}{N} ||(Xw-Y)^T(Xw-Y)|| Ein(w)=N1∣∣Xw−Y∣∣2=N1∣∣(Xw−Y)T(Xw−Y)∣∣
注意到这里使用了矩阵乘法的一些技巧, E i n E_{in} Ein肯定是个值,但是 X w − Y Xw-Y Xw−Y是个 ( d + 1 ) ∗ 1 (d+1)*1 (d+1)∗1的矩阵,所以求标量平方值需要使用转置。
( X w − Y ) T ( X w − Y ) = ( ( X w ) T − Y T ) ( X w − Y ) = ( w T X T − Y T ) ( X w − Y ) = w T X T X w − w T X T Y − Y T X w + Y Y T (Xw-Y)^T(Xw-Y) = ((Xw)^T-Y^T)(Xw-Y)\\ = (w^TX^T-Y^T)(Xw-Y)\\ =w^TX^TXw - w^TX^TY - Y^TXw+YY^T (Xw−Y)T(Xw−Y)=((Xw)T−YT)(Xw−Y)=(wTXT−YT)(Xw−Y)=wTXTXw−wTXTY−YTXw+YYT
之前再证明 w T x n = x n T w w^Tx_n = x_n^Tw wTxn=xnTw 成立时,提到,当矩阵 M M M是45度镜面对称时,其转置等于它本身。这里 Y T ( X w ) Y^T(Xw) YT(Xw)结果是 1 ∗ 1 1*1 1∗1的矩阵,镜面对称,所以,
( Y T ( X w ) ) T = ( X w ) T ( Y T ) T = w T X T Y (Y^T(Xw))^T = (Xw)^T(Y^T)^T = w^TX^TY (YT(Xw))T=(Xw)T(YT)T=wTXTY
这样,上面的因式分解式的中间两项可写成
w T X T X w − 2 w T X T Y + Y Y T w^TX^TXw - 2 w^TX^TY +YY^T wTXTXw−2wTXTY+YYT
保留自变量 w w w,令因变量
A = X T X , b = X T Y , c = Y Y T A = X^TX,\ b=X^TY,\ c=YY^T A=XTX, b=XTY, c=YYT
E i n ( w ) E_{in}(w) Ein(w)可写为:
E i n ( w ) = 1 N ( w T A w − 2 w T b + c ) E_{in}(w) = \frac{1}{N}(w^TAw-2w^Tb+c) Ein(w)=N1(wTAw−2wTb+c)
看上图,当 w w w只有一维时, E i n ( w ) E_{in}(w) Ein(w)简化成简单的二次式。
类推,当 w w w有多维时,
▽ E i n ( w ) = 1 N ( 2 A w − 2 b ) \triangledown E_{in}(w) = \frac{1}{N}(2Aw-2b) ▽Ein(w)=N1(2Aw−2b)
我们需要要求梯度为0时的 w w w就非常简单了:
A w − b = 0 = > A w = b = > ( A ) − 1 A w = A − 1 b Aw-b=0 => Aw = b =>(A)^{-1}Aw = A^{-1}b Aw−b=0=>Aw=b=>(A)−1Aw=A−1b
即,当 A A A可逆时
w = A − 1 b = X T X X T Y w = A^{-1}b\\ =X^TXX^TY w=A−1b=XTXXTY
我们把 X X X T X^XX^T XXXT叫做 X X X的伪逆矩阵, X ∔ X^\dotplus X∔。
虽然由于 N ⋙ g N \ggg g N⋙g, X T X X^TX XTX在大多数情况都是可逆的;但也不排除存在奇异矩阵 X T X X^TX XTX,这样的话就会有很多组解,但是其中一组解仍是 X ∔ Y X^\dotplus Y X∔Y,这里 X ∔ X^\dotplus X∔可能会有很多种定义方式。
我们在实践中,只需要调用软件程序中已经定义好的 ∔ \dotplus ∔即可。
Fun Time说当我们已经得到了 w L I N w_{LIN} wLIN,可以做预测了,我们预测的 y ^ \hat y y^会长什么样呢?
答案是:只需要将算好的 w w w代入即可。
这篇关于【林轩田】机器学习基石(九)——线性回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!