1 线性代数回顾
1.1 矩阵和向量
1、矩阵:由 m × n {m\times n} m×n个数组成的m行n列的数矩形阵表。
矩阵 A = [ 1402 191 1371 821 949 1437 147 1448 ] A = \left[ \begin{array} { c c } { 1402 } & { 191 } \\ { 1371 } & { 821 } \\ { 949 } & { 1437 } \\ { 147 } & { 1448 } \end{array} \right] A=⎣⎢⎢⎡1402137194914719182114371448⎦⎥⎥⎤是一个4行2列的矩阵,可以表示为 R 4 × 2 \mathbb{R} ^ { 4 \times 2 } R4×2,矩阵的维数为 m × n {m\times n} m×n。 A i j A _ { i j } Aij代表矩阵的第 i i i行第 j j j列的元素。
2、向量:向量是一种特殊的矩阵 ,在这里的向量默认为列向量。 y = [ 460 232 315 178 ] y = \left[ \begin{array} { c } { 460 } \\ { 232 } \\ { 315 } \\ { 178 } \end{array} \right] y=⎣⎢⎢⎡460232315178⎦⎥⎥⎤为4维列向量 ( 4 × 1 ) (4\times 1) (4×1)。
1.2 矩阵加法和矩阵与标量的乘法
1、矩阵的加法:矩阵相加,要求行数跟列数都相同,矩阵之间对应位置元素相加。
[ a b c d ] + [ w x y z ] = [ a + w b + x c + y d + z ] \left[ \begin{array} { l l } { a } & { b } \\ { c } & { d } \end{array} \right] + \left[ \begin{array} { l l } { w } & { x } \\ { y } & { z } \end{array} \right] = \left[ \begin{array} { l l } { a + w } & { b + x } \\ { c + y } & { d + z } \end{array} \right] [acbd]+[wyxz]=[a+wc+yb+xd+z]
例: [ 1 0 2 5 3 1 ] + [ 4 05 2 5 0 1 ] = [ 5 05 4 10 3 2 ] \left[ \begin{array} { l l } { 1 } & { 0 } \\ { 2 } & { 5 } \\ { 3 } & { 1 } \end{array} \right] + \left[ \begin{array} { l l } { 4 } & { 05 } \\ { 2 } & { 5 } \\ { 0 } & { 1 } \end{array} \right] = \left[ \begin{array} { c c } { 5 } & { 05 } \\ { 4 } & { 10 } \\ { 3 } & { 2 } \end{array} \right] ⎣⎡123051⎦⎤+⎣⎡4200551⎦⎤=⎣⎡54305102⎦⎤
2、矩阵与标量的乘法:矩阵中每个元素都与标量相乘。
[ a b c d ] ∗ x = [ a ∗ x b ∗ x c ∗ x d ∗ x ] \left[ \begin{array} { l l } { a } & { b } \\ { c } & { d } \end{array} \right] * x = \left[ \begin{array} { l l } { a * x } & { b * x } \\ { c * x } & { d * x } \end{array} \right] [acbd]∗x=[a∗xc∗xb∗xd∗x]
例: 3 × [ 1 0 2 5 3 1 ] = [ 3 0 6 15 9 3 ] = [ 1 0 2 5 3 1 ] × 3 3 \times \left[ \begin{array} { l l } { 1 } & { 0 } \\ { 2 } & { 5 } \\ { 3 } & { 1 } \end{array} \right] = \left[ \begin{array} { l l } { 3 } & { 0 } \\ { 6 } & { 15 } \\ { 9 } & { 3 } \end{array} \right] = \left[ \begin{array} { c c } { 1 } & { 0 } \\ { 2 } & { 5 } \\ { 3 } & { 1 } \end{array} \right] \times 3 3×⎣⎡123051⎦⎤=⎣⎡3690153⎦⎤=⎣⎡123051⎦⎤×3
解析:题中所有元素都乘2便得到正确结果。
3、组合算法:按照顺序从左到右计算。
解析:先计算 [ 4 6 7 ] / 2 \left[ \begin{array} { l } { 4 } \\ { 6 } \\ { 7 } \end{array} \right] / 2 ⎣⎡467⎦⎤/2,得到 [ 2 3 3.5 ] \left[ \begin{array} { l } { 2 } \\ { 3 } \\ { 3.5 } \end{array} \right] ⎣⎡233.5⎦⎤,然后计算 3 [ 2 1 0 ] 3\left[ \begin{array} { l } { 2 } \\ { 1 } \\ { 0 } \end{array} \right] 3⎣⎡210⎦⎤,得到 [ 6 3 0 ] \left[ \begin{array} { l } { 6 } \\ { 3 } \\ { 0 } \end{array} \right] ⎣⎡630⎦⎤,两者相减得到第三个选项。
1.3 矩阵和向量相乘
矩阵和向量相乘:后者的行数要等于前者的列数,也就是一个 m × n m\times n m×n的矩阵乘 n × 1 n\times 1 n×1的向量,得到的结果是一个 m × 1 m\times 1 m×1的向量。
[ a b c d e f ] ∗ [ x y ] = [ a ∗ x + b ∗ y c ∗ x + d ∗ y e ∗ x + f ∗ y ] \left[ \begin{array} { l l } { a } & { b } \\ { c } & { d } \\ { e } & { f } \end{array} \right] * \left[ \begin{array} { l } { x } \\ { y } \end{array} \right] = \left[ \begin{array} { c } { a * x + b * y } \\ { c * x + d * y } \\ { e * x + f * y } \end{array} \right] ⎣⎡acebdf⎦⎤∗[xy]=⎣⎡a∗x+b∗yc∗x+d∗ye∗x+f∗y⎦⎤
解析:矩阵是 3 × 4 3\times 4 3×4的矩阵,向量是 4 × 1 4\times 1 4×1的维度,两者相乘得到 3 × 1 3\times 1 3×1的新矩阵。
解析: [ 1 0 3 2 1 5 3 1 2 ] × [ 1 6 2 ] = [ 1 × 1 + 0 × 6 + 3 × 2 2 × 1 + 1 × 6 + 5 × 2 3 × 1 + 1 × 6 + 2 × 2 ] = [ 7 18 13 ] \left[ \begin{array} { l l l } { 1 } & { 0 } & { 3 } \\ { 2 } & { 1 } & { 5 } \\ { 3 } & { 1 } & { 2 } \end{array} \right] \times \left[ \begin{array} { l } { 1 } \\ { 6 } \\ { 2 } \end{array} \right]=\left[ \begin{array} { l l l } { 1\times 1+0\times 6+3\times 2 } \\ { 2\times 1+1\times 6+5 \times 2} \\ { 3\times 1+1\times 6+2 \times 2 } \end{array} \right] =\left[ \begin{array} { l } { 7 } \\ { 18 } \\ { 13 } \end{array} \right] ⎣⎡123011352⎦⎤×⎣⎡162⎦⎤=⎣⎡1×1+0×6+3×22×1+1×6+5×23×1+1×6+2×2⎦⎤=⎣⎡71813⎦⎤
1.4 矩阵相乘
两个矩阵相乘:前一个矩阵的列数必须跟后一个矩阵的行数相同才能进行矩阵之间的乘法。也就是一个 m × n m\times n m×n的矩阵乘 n × k n\times k n×k的向量,得到的结果是一个 m × k m\times k m×k的向量。
[ a b c d e f ] ∗ [ w x y z ] = [ a ∗ w + b ∗ y a ∗ x + b ∗ z c ∗ w + d ∗ y c ∗ x + d ∗ z e ∗ w + f ∗ y e ∗ x + f ∗ z ] \left[ \begin{array} { l l } { a } & { b } \\ { c } & { d } \\ { e } & { f } \end{array} \right] * \left[ \begin{array} { c c } { w } & { x } \\ { y } & { z } \end{array} \right] = \left[ \begin{array} { c c } { a * w + b * y } & { a * x + b * z } \\ { c * w + d * y } & { c * x + d * z } \\ { e * w + f * y } & { e * x + f * z } \end{array} \right] ⎣⎡acebdf⎦⎤∗[wyxz]=⎣⎡a∗w+b∗yc∗w+d∗ye∗w+f∗ya∗x+b∗zc∗x+d∗ze∗x+f∗z⎦⎤
解析: [ 1 3 2 4 0 5 ] [ 1 0 2 3 ] = [ 1 × 1 + 3 × 2 1 × 0 + 3 × 3 2 × 1 + 4 × 2 2 × 0 + 4 × 3 0 × 1 + 5 × 2 0 × 0 + 5 × 3 ] = [ 7 9 10 12 10 15 ] \left[ \begin{array} { l l } { 1 } & { 3 } \\ { 2 } & { 4 } \\ { 0 } & { 5 } \end{array} \right] \left[ \begin{array} { l l } { 1 } & { 0 } \\ { 2 } & { 3 } \end{array} \right] =\left[ \begin{array} { l l l } { 1\times 1+3\times 2 } &{1\times 0+3\times 3} \\ { 2\times 1+4\times 2 } &{2\times 0+4\times 3} \\ { 0\times 1+5\times 2 } &{0\times 0+5\times 3}\end{array} \right] = \left[ \begin{array} { l l } { 7 } & { 9 } \\ { 10 } & { 12 } \\ { 10 } & { 15 } \end{array} \right] ⎣⎡120345⎦⎤[1203]=⎣⎡1×1+3×22×1+4×20×1+5×21×0+3×32×0+4×30×0+5×3⎦⎤=⎣⎡7101091215⎦⎤
1.5 矩阵乘法的性质
1、矩阵乘法的性质:
- 矩阵的乘法不满足交换律: A × B ≠ B × A A \times B \neq B \times A A×B̸=B×A
- 矩阵的乘法满足结合律: A × ( B × C ) = ( A × B ) × C A \times ( B \times C ) = ( A \times B ) \times C A×(B×C)=(A×B)×C
2、单位矩阵:除对角线外其余元素都为0,且从左上角到右下角的对角线元素均为1的方阵。通常用 I I I或 E E E表示, I n × n I _ { n \times n } In×n表示矩阵为 n × n n\times n n×n的单位矩阵。例如 [ 1 0 0 0 1 0 0 0 1 ] \left[ \begin{array} { l l l } { 1 } & { 0 } & { 0 } \\ { 0 } & { 1 } & { 0 } \\ { 0 } & { 0 } & { 1 } \end{array} \right] ⎣⎡100010001⎦⎤为 3 × 3 3\times 3 3×3的单位矩阵。
单位矩阵在矩阵乘法中同平常数的乘法的1,对于单位矩阵,有 A I = I A = A A I = I A = A AI=IA=A。
解析:单位矩阵乘矩阵的结果为该矩阵本身。
1.6 矩阵的逆和转置
1、矩阵的逆:如果一个矩阵 A A A为 m × m m\times m m×m的方阵且有逆矩阵,则有 A A − 1 = A − 1 A = I A A ^ { - 1 } = A ^ { - 1 } A = I AA−1=A−1A=I。 A − 1 A ^ { - 1 } A−1被记为矩阵的逆。
2、矩阵的转置:已知 A A A为 m × n m\times n m×n阶矩阵,将矩阵 A A A的 A ( i , j ) A(i,j) A(i,j)元素的值跟 A ( j , i ) A(j,i) A(j,i)元素的值对调,形成的新的矩阵 B B B称为矩阵 A A A的转置,记作 A T A ^ { T } AT。
A = [ a b c d e f ] , A T = [ a c e b d f ] A = \left[ \begin{array} { l l } { a } & { b } \\ { c } & { d } \\ { e } & { f } \end{array} \right],A ^ { T } = \left[ \begin{array} { l l l } { a } & { c } & { e } \\ { b } & { d } & { f } \end{array} \right] A=⎣⎡acebdf⎦⎤,AT=[abcdef]
3、矩阵转置的性质:
( 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 \times B ) ^ { T } = B ^ { T } \times A ^ { T } (A×B)T=BT×AT
( A T ) T = A \left( A ^ { T } \right) ^ { T } = A (AT)T=A
( K A ) T = K A T ( K A ) ^ { T } = K A ^ { T } (KA)T=KAT
2 多变量线性回归
2.1 多维特征
前面学习了单个特征的模型,在实际中,更多的是有多个特征的一些数据,我们要构建多个变量的模型,模型中的特征为 ( x 1 , x 1 , … , x n ) \left( x _ { 1 } , x _ { 1 } , \ldots , x _ { n } \right) (x1,x1,…,xn)。
上面图片中圈出来的一行为一个样本的一组特征值,添加了多个特征后,引进一些新的标注:
x j ( i ) = value of feature j in the i t h training example x ( i ) = the input (features) of the i t h training example m = the number of training examples n = the number of features \begin{aligned} x _ { j } ^ { ( i ) } & = \text { value of feature } j \text { in the } i ^ { t h } \text { training example } \\ x ^ { ( i ) } & = \text { the input (features) of the } i ^ { t h } \text { training example } \\ m & = \text { the number of training examples } \\ n & = \text { the number of features } \end{aligned} xj(i)x(i)mn= value of feature j in the ith training example = the input (features) of the ith training example = the number of training examples = the number of features
x j ( i ) x _ { j } ^ { ( i ) } xj(i)表示第 i i i个样本的第 j j j个特征的值,比如上图中 x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x _ { 2 } ^ { ( 2 ) } = 3 , x _ { 3 } ^ { ( 2 ) } = 2 x2(2)=3,x3(2)=2。
解析: x 1 ( 4 ) x _ { 1 } ^ { ( 4 ) } x1(4)代表第4个样本的第1个特征。
支持多个变量的假设 h h h我们定义为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + ⋯ + θ n x n h _ { \theta } ( x ) = \theta _ { 0 } + \theta _ { 1 } x _ { 1 } + \theta _ { 2 } x _ { 2 } + \theta _ { 3 } x _ { 3 } + \cdots + \theta _ { n } x _ { n } hθ(x)=θ0+θ1x1+θ2x2+θ3x3+⋯+θnxn
原来定义的假设函数 h h h有 n + 1 n+1 n+1个参数和 n n n个变量,为了计算方便,引进 x 0 = 1 x _ { 0 } = 1 x0=1,则公式转换为 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h _ { \theta } ( x ) = \theta _ { 0 } x _ { 0 } + \theta _ { 1 } x _ { 1 } + \theta _ { 2 } x _ { 2 } + \ldots + \theta _ { n } x _ { n } hθ(x)=θ0x0+θ1x1+θ2x2+…+θnxn,根据矩阵乘法,假设函数 h h h可以表示为:
h θ ( x ) = [ θ 0 θ 1 … θ n ] [ x 0 x 1 ⋮ x n ] = θ T x h _ { \theta } ( x ) = \left[ \begin{array} { c c c c } { \theta _ { 0 } } & { \theta _ { 1 } } & { \dots } & { \theta _ { n } } \end{array} \right] \left[ \begin{array} { c } { x _ { 0 } } \\ { x _ { 1 } } \\ { \vdots } \\ { x _ { n } } \end{array} \right] = \theta ^ { T } x hθ(x)=[θ0θ1…θn]⎣⎢⎢⎢⎡x0x1⋮xn⎦⎥⎥⎥⎤=θTx
上面也称为假设函数的矢量化。
2.2 多变量梯度下降
跟单变量梯度下降相似,多变量梯度下降同样构建一个代价函数 J ( θ 0 , θ 1 , … , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta _ { 0 } , \theta _ { 1 } , \ldots , \theta _ { n } \right) = \frac { 1 } { 2 m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } J(θ0,θ1,…,θn)=2m1∑i=1m(hθ(x(i))−y(i))2,其中 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h _ { \theta } ( x ) = \theta _ { 0 } x _ { 0 } + \theta _ { 1 } x _ { 1 } + \theta _ { 2 } x _ { 2 } + \ldots + \theta _ { n } x _ { n } hθ(x)=θ0x0+θ1x1+θ2x2+…+θnxn,目标同样是找到使得代价函数的值最小的参数组合:
Repeat
{
\{
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
…
,
θ
n
)
\theta _ { j } : = \theta _ { j } - \alpha \frac { \partial } { \partial \theta _ { j } } J \left( \theta _ { 0 } , \ldots , \theta _ { n } \right)
θj:=θj−α∂θj∂J(θ0,…,θn)
(simultaneously update for every
j
=
0
,
…
,
n
)
j = 0 , \ldots , n )
j=0,…,n)
} \} }
根据之前的单变量梯度下降,通过多次迭代计算代价函数直至收敛,可得:
Repeat { θ j : = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) ( simultaneously update θ j for j = 0 , 1 , … , n ) } \begin{array} { l } { \text { Repeat } \{ } \\ { \theta _ { j } : = \theta _ { j } - \alpha \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) \cdot x _ { j } ^ { ( i ) } \right) } \\ { \left( \text { simultaneously update } \theta _ { j } \right. } \\ { \text { for } j = 0,1 , \ldots , n ) } \\ { \} } \end{array} Repeat {θj:=θj−αm1∑i=1m((hθ(x(i))−y(i))⋅xj(i))( simultaneously update θj for j=0,1,…,n)}
在上图, x 0 ( i ) = 1 x _ { 0 } ^ { ( i ) }=1 x0(i)=1。通过选取一系列的参数值,计算预测结果后,再给出新的一组参数,不断循环直至收敛,得到最终结果。
2.3 梯度下降之特征缩放
面对多维特征的问题时,特征之间尺度范围太大会导致 θ \theta θ下降速度缓慢,而且如果变量非常不均匀,可能会一直振荡却达不到有效的最小值。为了防止这个问题,我们可以通过使每个输入值在大致相同的范围内来加速梯度下降,理想的情况是: − 1 ≤ x ( i ) ≤ 1 - 1 \leq x ( i ) \leq 1 −1≤x(i)≤1或者 − 0.5 ≤ x ( i ) ≤ 0.5 - 0.5 \leq x _ { ( i ) } \leq 0.5 −0.5≤x(i)≤0.5。
我们可以通过两种方法来达到让每个输入值都在大致相同的范围:特征缩放和均值归一化。
特征缩放:输入值除以输入变量的范围(即最大值减去最小值),经过特征缩放后的变量的范围为 − 1 ≤ x ( i ) ≤ 1 - 1 \leq x ( i ) \leq 1 −1≤x(i)≤1,特征缩放的公式为 x i : = x i s i x _ { i } : = \frac { x _ { i }} { s _ { i } } xi:=sixi,其中 S i = x m a x − x m i n \mathcal { S } _ { i }=x_{max}-x_{min} Si=xmax−xmin或者标准差。
均值归一化:输入值减去输入变量的平均值后除以输入变量的标准差,经过均值归一化后变量的范围为 − 0.5 ≤ x ( i ) ≤ 0.5 - 0.5 \leq x _ { ( i ) } \leq 0.5 −0.5≤x(i)≤0.5,均值归一化的公式为 x i : = x i − μ i s i x _ { i } : = \frac { x _ { i } - \mu _ { i } } { s _ { i } } xi:=sixi−μi,其中 μ i \mu _ { i } μi是输入变量的平均值, S i \mathcal { S } _ { i } Si是输入变量的方差或者输入的范围。
要注意的是,特征缩放不需要在 x 0 x_0 x0使用,因为 x 0 = 1 x_0=1 x0=1。
解析:题中给出了平均值为38,年龄范围为30-50,因此年龄的范围为20,根据公式 x i : = x i − μ i s i x _ { i } : = \frac { x _ { i } - \mu _ { i } } { s _ { i } } xi:=sixi−μi可以得到选项4是正确的。
2.4 梯度下降之学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如 0.001)进行比较,但通常看上面的图表更好。
梯度下降算法的每次迭代受到学习率的影响,如果学习率 α \alpha α过小,则达到收敛所需的迭代次数会非常高;如果学习率 α \alpha α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛 。
2.5 特征和多项式回归
我们在确定数学模型的时候可以通过几种不同的方式改进我们的特征和假设函数的形式,比如取 x 1 ⋅ x 2 x _ { 1 } \cdot x _ { 2 } x1⋅x2将 x 1 x _ { 1 } x1和 x 2 x _ { 2 } x2组合成新的特征 x 3 x _ { 3 } x3。
比如下面的例子,在房屋预测问题中,我们将临街宽度和深度相乘得到房屋的占地面积,这是一个新的变量。
但是线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据 ,比如用变量的平方或者变量的三次方来创建模型,也就是多项式回归模型。
可以看到,有些曲线的拟合效果比线性模型的要好,在决定用什么模型时,需要观察数据。另外,也可以令 x 2 = x 2 2 , x 3 = x 3 3 x _ { 2 } = x _ { 2 } ^ { 2 } , x _ { 3 } = x _ { 3 } ^ { 3 } x2=x22,x3=x33,这样模型就转化为线性模型了。
有一点要注意的是,如果采用多项式回归模型,可以根据上图看到数据范围更加庞大,所以用多项式回归模型的时候,特征缩放是很有必要的。
2.6 正规方程
前面的梯度下降给出了一种最小化代价函数的方法,而正规方程是第二种最小化代价函数的方法,不同于梯度下降算法的迭代算法,正规方程是通过将代价函数 J ( θ ) J ( \theta ) J(θ)对我们要求的参数 θ \theta θ求导,并将它们设置为零后求得参数值。在这里 X X X为训练样本特征矩阵, y y y为训练集结果向量。
根据 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J ( \theta ) = \frac { 1 } { 2 m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2和 h θ ( x ) = θ T X = X θ h _ { \theta } ( x ) = \theta ^ { T } X= X\theta hθ(x)=θTX=Xθ,我们对 θ \theta θ进行求导:
∂ ∂ θ j J ( θ j ) = 1 m X T ( X θ − y ) = 0 \frac { \partial } { \partial \theta _ { j } } J \left( \theta _ { j } \right) =\frac { 1 } { m }X^T\left(X\theta -y\right)=0 ∂θj∂J(θj)=m1XT(Xθ−y)=0
X θ − y = 0 X\theta -y=0 Xθ−y=0
X θ = y X\theta=y Xθ=y
X T X θ = X T y X^TX\theta=X^Ty XTXθ=XTy
( X T X ) − 1 X T X θ = ( X T X ) − 1 X T y (X^TX)^{-1}X^TX\theta=(X^TX)^{-1}X^Ty (XTX)−1XTXθ=(XTX)−1XTy
θ = ( X T X ) − 1 X T y \theta = \left( X ^ { T } X \right) ^ { - 1 } X ^ { T } y θ=(XTX)−1XTy
θ = ( [ 1 1 1 1 2104 1416 1534 852 5 3 3 2 1 2 2 1 45 40 30 36 ] × [ 1 2104 5 1 45 1 1416 3 2 40 1 1534 3 2 30 1 852 2 1 36 ] ) − 1 × [ 1 1 1 1 2104 1416 1534 852 5 3 3 2 1 2 2 1 45 40 30 36 ] × [ 460 232 315 178 ] \theta=\left( \left[ \begin{array} { c c c c } { 1 } & { 1 } & { 1 } & { 1 } \\ { 2104 } & { 1416 } & { 1534 } & { 852 } \\ { 5 } & { 3 } & { 3 } & { 2 } \\ { 1 } & { 2 } & { 2 } & { 1 } \\ { 45 } & { 40 } & { 30 } & { 36 } \end{array} \right] \times \left[ \begin{array} { c c c c c } { 1 } & { 2104 } & { 5 } & { 1 } & { 45 } \\ { 1 } & { 1416 } & { 3 } & { 2 } & { 40 } \\ { 1 } & { 1534 } & { 3 } & { 2 } & { 30 } \\ { 1 } & { 852 } & { 2 } & { 1 } & { 36 } \end{array} \right] \right) ^ { - 1 }\times \left[ \begin{array} { c c c c } { 1 } & { 1 } & { 1 } & { 1 } \\ { 2104 } & { 1416 } & { 1534 } & { 852 } \\ { 5 } & { 3 } & { 3 } & { 2 } \\ { 1 } & { 2 } & { 2 } & { 1 } \\ { 45 } & { 40 } & { 30 } & { 36 } \end{array} \right] \times \left[ \begin{array} { c } { 460 } \\ { 232 } \\ { 315 } \\ { 178 } \end{array} \right] θ=⎝⎜⎜⎜⎜⎛⎣⎢⎢⎢⎢⎡12104514511416324011534323018522136⎦⎥⎥⎥⎥⎤×⎣⎢⎢⎡11112104141615348525332122145403036⎦⎥⎥⎤⎠⎟⎟⎟⎟⎞−1×⎣⎢⎢⎢⎢⎡12104514511416324011534323018522136⎦⎥⎥⎥⎥⎤×⎣⎢⎢⎡460232315178⎦⎥⎥⎤
需要注意的是,对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
正规方程相比较梯度下降算法,一个很大的优点是它不需要进行特征缩放。
正规方程方法和梯度下降算法的对比如下:
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α \alpha α | 不需要选择学习率 α \alpha α |
需要多次迭代 | 一次运算得到 |
当特征数量 n n n比较大的时候也较好的适用 | 需要计算 ( X T X ) − 1 \left( X ^ { T } X \right) ^ { - 1 } (XTX)−1,如果特征数量 n n n较大时,运算代价比较大,因为矩阵逆的计算时间复杂度为 O ( n 3 ) O \left( n ^ { 3 } \right) O(n3) |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模型等其他模型 |
只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ \theta θ的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法 。
2.7 正规方程和不可逆性
在上面,讲了正规方程以及参数 θ \theta θ的求解,解得 θ = ( X T X ) − 1 X T y \theta = \left( X ^ { T } X \right) ^ { - 1 } X ^ { T } y θ=(XTX)−1XTy,在这里需要计算 ( X T X ) − 1 \left( X ^ { T } X \right) ^ { - 1 } (XTX)−1,前面我们讲过了矩阵的逆,也知道了矩阵的逆不一定存在,在这里,矩阵不可逆的常见原因有两个:
- 存在冗余特征,特征之间有密切的练习,比如线性相关。
- 特征太多,比如 m ≤ n m \leq n m≤n。
上述问题的解决方案包括删除与另一个线性相关的特征或在特征太多时删除一个或多个特征。