一. 多变量线性回归
1.多维特征
我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为
(
x
1
,
x
1
,
…
,
x
n
)
\left(x_{1}, x_{1}, \ldots, x_{n}\right)
(x1,x1,…,xn)。
新的注释:
n
n
n代表特征的数量
x ( i ) x^{(i)} x(i)代表第 i i i个训练实例,是特征矩阵中的第 i i i行,是一个向量(vector)。
比方说,上图的
x ( 2 ) = [ 1416 3 2 40 ] x^{(2)}=\left[ \begin{array}{c}{1416} \\ {3} \\ {2} \\ {40}\end{array}\right] x(2)=⎣⎢⎢⎡14163240⎦⎥⎥⎤
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。
假设
h
h
h表示为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}
hθ(x)=θ0+θ1x1+θ2x2+…+θnxn
这个公式中有
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
x
=
[
x
0
x
1
x
2
⋮
x
n
]
∈
R
n
+
1
x=\left[ \begin{array}{c}{x_{0}} \\ {x_{1}} \\ {x_{2}}\\ {\vdots} \\ {x_{n}}\end{array}\right] \in \mathbb{R}^{n+1}
x=⎣⎢⎢⎢⎢⎢⎡x0x1x2⋮xn⎦⎥⎥⎥⎥⎥⎤∈Rn+1
θ
=
[
θ
0
θ
1
θ
2
⋮
θ
n
]
∈
R
n
+
1
\theta=\left[ \begin{array}{l}{\theta_{0}} \\ {\theta_{1}} \\ {\theta_{2}} \\ {\vdots} \\ {\theta_{n}}\end{array}\right] \in \mathbb{R}^{n+1}
θ=⎣⎢⎢⎢⎢⎢⎡θ0θ1θ2⋮θn⎦⎥⎥⎥⎥⎥⎤∈Rn+1
−
-
−
−
-
−
−
-
−
→
→
→
[
θ
0
θ
1
…
θ
n
]
⎵
(
n
+
1
)
×
1
[
x
0
x
1
⋮
x
n
]
\underbrace{\left[\theta_{0} \theta_{1} \ldots \theta_{n}\right]}_{(n+1) \times 1} \left[ \begin{array}{c}{x_{0}} \\ {x_{1}} \\ {\vdots} \\ {x_{n}}\end{array}\right]
(n+1)×1
[θ0θ1…θn]⎣⎢⎢⎢⎡x0x1⋮xn⎦⎥⎥⎥⎤
此时模型中的参数是一个 n + 1 n+1 n+1维的向量,任何一个训练实例也都是 n + 1 n+1 n+1维的向量,特征矩阵X的维度是 m ∗ ( n + 1 ) m*(n+1) m∗(n+1) 。 因此公式可以简化为: h θ ( x ) = θ T X h_{\theta}(x)=\theta^{T} X hθ(x)=θTX,其中上标 T T T代表矩阵转置。
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)=2m1i=1∑M(hθ(x(i))−y(i))2
其中:
h
θ
(
x
)
=
θ
T
X
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
h_{\theta}(x)=\theta^{T} X=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}
hθ(x)=θTX=θ0+θ1x1+θ2x2+…+θnxn
我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
Repeat
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
,
…
,
θ
n
)
}
\begin{array}{c}{\text { Repeat }\{ } \\ {\theta_{\mathrm{j}} :=\theta_{\mathrm{j}}-\alpha \frac{\partial}{\partial \theta_{j}} \mathrm{J}\left(\theta_{0}, \theta_{1}, \ldots, \theta_{\mathrm{n}}\right)} \\ {\}}\end{array}
Repeat {θj:=θj−α∂θj∂J(θ0,θ1,…,θn)}
即:
R
e
p
e
a
t
{
Repeat \{
Repeat{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\theta_{\mathrm{j}} :=\theta_{\mathrm{j}}-\alpha \frac{\partial}{\partial \theta_{\mathrm{j}}} \frac{1}{2 \mathrm{m}} \sum_{\mathrm{i}=1}^{\mathrm{m}}\left(\mathrm{h}_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)-\mathrm{y}^{(\mathrm{i})}\right)^{2}
θj:=θj−α∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2
}
\}
}
求导数后得到:
repeat until convergence:
{
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
j
(
i
)
for
j
:
=
0
,
1
…
n
}
\begin{array}{l}{\text { repeat until convergence: }\{ } \\ {\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x_{j}^{(i)} \quad \text { for } \mathbf{j} :=0,1 \ldots \mathrm{n}} \\ {\}}\end{array}
repeat until convergence: {θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))⋅xj(i) for j:=0,1…n}
n
>
=
1
n>=1
n>=1(单变量线性回归时,n=1)
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
0
(
i
)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
1
(
i
)
θ
2
:
=
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
2
(
i
)
⋮
θ
n
:
=
θ
n
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
n
(
i
)
\begin{aligned} \theta_{0} & :=\theta_{0}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x_{0}^{(i)} \\ \theta_{1} & :=\theta_{1}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x_{1}^{(i)} \\ \theta_{2} & :=\theta_{2}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x_{2}^{(i)} \\ & \vdots \\ \theta_{n} & :=\theta_{n}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x_{n}^{(i)} \end{aligned}
θ0θ1θ2θn:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i):=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x1(i):=θ2−αm1i=1∑m(hθ(x(i))−y(i))⋅x2(i)⋮:=θn−αm1i=1∑m(hθ(x(i))−y(i))⋅xn(i)
当然,同单变量梯度下降一样,计算时需要同时更新所有参数。
h
θ
(
x
)
=
θ
T
x
h_{\theta}(x)=\theta^{T} x
hθ(x)=θTx
则得到同时更新参数的向量化(Vectorization)实现:
θ
=
θ
−
α
1
m
(
X
T
(
X
θ
−
y
)
)
\theta=\theta-\alpha \frac{1}{m}\left(X^{T}(X \theta-y)\right)
θ=θ−αm1(XT(Xθ−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 = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h_{\theta}(x)=\theta^{T} X=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n} hθ(x)=θTX=θ0x0+θ1x1+θ2x2+…+θnxn
Python 代码:
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
3.梯度下降法实践:特征缩放
面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。这个做法就跟我们数学中转换坐标系一样,只是让计算更快而已,并不是对结果有影响。
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间(这个数到底是不是-1和+1这个区间并不是很重要,我们可以根据情况自己决定)。如图:
均值归一化(Mean normalization):
最简单的方法是令: x n = x 2 − μ n s n x_{n}=\frac{x_{2}-\mu_{\mathrm{n}}}{s_{\mathrm{n}}} xn=snx2−μn其中 μ n \mu_{n} μn是平均值, s n s_{n} sn是标准差。
4.梯度下降法实践:学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001)进行比较,但通常看上面这样的图表更好。
梯度下降算法的每次迭代受到学习率的影响,如果学习率
α
\alpha
α过小,则达到收敛所需的迭代次数会非常高;如果学习率
α
\alpha
α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
α
=
0.01
,
0.03
,
0.1
,
0.3
,
1
,
3
,
10
\alpha=0.01, 0.03 , 0.1 , 0.3 , 1, 3 , 10
α=0.01,0.03,0.1,0.3,1,3,10
5.特征和多项式回归(Features and Polynomial Regression)
还是房价预测问题:特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。
h
θ
(
x
)
=
θ
0
+
θ
1
×
frontage
+
θ
2
×
depth
h_{\theta}(x)=\theta_{0}+\theta_{1} \times \text { frontage }+\theta_{2} \times \text { depth }
hθ(x)=θ0+θ1× frontage +θ2× depth
x
1
=
frontage
,
x
2
=
depth
x_{1}=\text { frontage } ,x_{2}=\text { depth }
x1= frontage ,x2= depth
线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归(Polynomial Regression)。
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,
比如一个二次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}^{2}
hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
+
θ
3
x
3
3
h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}^{2}+\theta_{3} x_{3}^{3}
hθ(x)=θ0+θ1x1+θ2x22+θ3x33
通常我们需要先观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令:
x 2 = x 2 2 , x 3 = x 3 3 x_{2}=x_{2}^{2}, x_{3}=x_{3}^{3} x2=x22,x3=x33,从而将模型转化为线性回归模型。
根据函数图形特性,我们还可以使: h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 1 ( s i z e ) 2 h_{\theta}(x)=\theta_{0}+\theta_{1}(s i z e)+\theta_{1}(s i z e)^{2} hθ(x)=θ0+θ1(size)+θ1(size)2或者 h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 1 s i z e h_{\theta}(x)=\theta_{0}+\theta_{1}(s i z e)+\theta_{1} \sqrt{s i z e} hθ(x)=θ0+θ1(size)+θ1size
在使用多项式回归时,要记住非常有必要进行特征缩放,比如 x 1 x_{1} x1的范围为 1-1000,那么 x 1 2 x_{1}^{2} x12的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。
或许这个地方你会很疑惑,这里的特征这么多,特征的选择方式也有这么多,我们究竟应该如何选择应该使用什么特征呢?在后面的笔记中,我们会学到一些算法,它们可以自动选择使用什么特征,决定到底使用二次函数还是三次函数…
6.正规方程
到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。如:
Intuition: If
1
D
(
θ
∈
R
)
→
J
(
θ
)
=
a
θ
2
+
b
θ
+
c
\begin{array}{l}{\text { Intuition: If } 1 \mathrm{D}(\theta \in \mathbb{R})} \\{\rightarrow J(\theta)=a \theta^{2}+b \theta+c}\end{array}
Intuition: If 1D(θ∈R)→J(θ)=aθ2+bθ+c
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的
:
∂
∂
θ
j
J
(
θ
j
)
=
0
: \frac{\partial}{\partial \theta_{j}} J\left(\theta_{j}\right)=0
:∂θj∂J(θj)=0 。
m
=
4
m=4
m=4
ps:加了一列全是1的
x
0
x_0
x0是因为这个就可以计算出代价函数的第一个参数
θ
0
\theta_0
θ0。
假设我们的训练集特征矩阵为 X X X(包含了 x 0 = 1 x_{0}=1 x0=1 )并且我们的训练集结果为向量 y y y,则利用正规方程解出向量 θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)−1XTy 。 上标T代表矩阵转置,上标-1 代表矩阵的逆。设矩阵 A = X T X A=X^{T} X A=XTX,则 ( X T X ) − 1 = A − 1 \left(X^{T} X\right)^{-1}=A^{-1} (XTX)−1=A−1
X
=
[
1
2104
5
1
45
1
1416
3
2
40
1
1534
3
2
30
1
852
2
1
36
]
X=\left[ \begin{array}{lllll}{1} & {2104} & {5} & {1} & {45} \\ {1} & {1416} & {3} & {2} & {40} \\ {1} & {1534} & {3} & {2} & {30} \\ {1} & {852} & {2} & {1} & {36}\end{array}\right]
X=⎣⎢⎢⎡11112104141615348525332122145403036⎦⎥⎥⎤
即:
X
(
0
)
X
(
1
)
X
(
2
)
X
(
3
)
X
(
4
)
y
1
2104
5
1
45
460
1
1416
3
2
40
232
1
1534
3
2
30
315
1
852
2
1
36
178
\begin{array}{|c|c|c|c|c|c|}\hline X(0) & {X(1)} & {X(2)} & {X(3)} & {X(4)} & {y} \\ \hline 1 & {2104} & {5} & {1} & {45} & {460} \\ \hline 1 & {1416} & {3} & {2} & {40} & {232} \\ \hline 1 & {1534} & {3} & {2} & {30} & {315} \\ \hline 1 & {852} & {2} & {1} & {36} & {178} \\ \hline\end{array}
X(0)1111X(1)210414161534852X(2)5332X(3)1221X(4)45403036y460232315178
运用正规方程方法求解参数:
(
[
1
1
1
1
2104
1416
1534
852
5
3
2
2
1
2
30
36
]
×
[
1
2104
5
1
45
1
1416
3
2
40
1
1534
3
2
30
1
852
2
1
36
]
)
−
1
\left(\left[ \begin{array}{cccc}{1} & {1} & {1} & {1} \\ {2104} & {1416} & {1534} & {852} \\ {5} & {3} & {2} & {2} \\ {1} & {2} & {30} & {36}\end{array}\right] \times \left[ \begin{array}{ccccc}{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}
⎝⎜⎜⎛⎣⎢⎢⎡12104511141632115342301852236⎦⎥⎥⎤×⎣⎢⎢⎡11112104141615348525332122145403036⎦⎥⎥⎤⎠⎟⎟⎞−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
]
\times \left[ \begin{array}{cccc}{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⎦⎥⎥⎥⎥⎤×⎣⎢⎢⎡460232315178⎦⎥⎥⎤
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
梯度下降与正规方程的比较:
总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。
随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者我们以后在课程中,会讲到的一些其他的算法,因为标准方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法。所以,根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。
正规方程的python实现:
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)
return theta
7.正规方程及不可逆性(可选)
θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)−1XTy
当计算 θ = i n v ( X ′ X ) X ′ y \theta=inv(X'X ) X'y θ=inv(X′X)X′y,那对于矩阵 X ′ X X'X X′X的结果是不可逆的情况咋办呢?
有些矩阵可逆,而有些矩阵不可逆。我们称那些不可逆矩阵为奇异或退化矩阵。 问题的重点在于
X
′
X
X'X
X′X的不可逆的问题很少发生。
例如,在预测住房价格时,如果是
x
1
x_1
x1以英尺为尺寸规格计算的房子,是以平方米为尺寸规格计算的房子,同时,你也知道1米等于3.28英尺 ( 四舍五入到两位小数 ),这样,你的这两个特征值将始终满足约束:
x
1
=
x
2
∗
(
3.28
)
2
x_{1}=x_{2} *(3.28)^{2}
x1=x2∗(3.28)2。 实际上,你可以用这样的一个线性方程,来展示那两个相关联的特征值,矩阵
X
′
X
X'X
X′X将是不可逆的。
第二个原因是,在你想用大量的特征值,尝试实践你的学习算法的时候,可能会导致矩阵的结果是不可逆的。 具体地说,在 m m m小于或等于n的时候,例如,有 m m m等于10个的训练样本也有 n n n等于100的特征数量。要找到适合的 n + 1 n+1 n+1维参数矢量 θ \theta θ,这将会变成一个101维的矢量,尝试从10个训练样本中找到满足101个参数的值,这工作可能会让你花上一阵子时间,但这并不总是一个好主意。因为,正如我们所看到你只有10个样本,以适应这100或101个参数,数据还是有些少。
如何使用小数据样本以得到这100或101个参数,通常,我们会使用一种叫做正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当 m m m比 n n n小的时候的问题。即使你有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。 总之当你发现的矩阵 X ′ X X'X X′X的结果是奇异矩阵,或者找到的其它矩阵是不可逆的,我会建议你这么做。
首先,看特征值里是否有一些多余的特征,像这些和是线性相关的,互为线性函数。同时,当有一些多余的特征时,可以删除这两个重复特征里的其中一个,无须两个特征同时保留,将解决不可逆性的问题。因此,首先应该通过观察所有特征检查是否有多余的特征,如果有多余的就删除掉,直到他们不再是多余的为止,如果特征数量实在太多,我会删除些 用较少的特征来反映尽可能多内容,否则我会考虑使用正规化方法。 如果矩阵 X ′ X X'X X′X是不可逆的,(通常来说,不会出现这种情况),如果在Octave里,可以用伪逆函数pinv() 来实现。这种使用不同的线性代数库的方法被称为伪逆。即使 X ′ X X'X X′X的结果是不可逆的,但算法执行的流程是正确的。总之,出现不可逆矩阵的情况极少发生,所以在大多数实现线性回归中,出现不可逆的问题不应该过多的关注 X T X X^{T} X XTX是不可逆的。
θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)−1XTy的推导过程:
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
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
h_{\theta}(x)=\theta^{T} X=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}
hθ(x)=θTX=θ0x0+θ1x1+θ2x2+…+θnxn
将向量表达形式转为矩阵表达形式,则有
J
(
θ
)
=
1
2
(
X
θ
−
y
)
2
J(\theta)=\frac{1}{2}(X \theta-y)^{2}
J(θ)=21(Xθ−y)2 ,其中
x
x
x为
m
m
m行
n
n
n列的矩阵(
m
m
m为样本个数,
n
n
n为特征个数),为行1列的矩阵,
θ
\theta
θ为
n
n
n行1列的矩阵,对进行如下变换:
J
(
θ
)
=
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
=
1
2
(
θ
T
X
T
−
y
T
)
(
X
θ
−
y
)
=
1
2
(
θ
T
X
T
X
θ
−
θ
T
X
T
y
−
y
T
X
θ
−
y
T
y
)
\begin{array}{l}{J(\theta)=\frac{1}{2}(X \theta-y)^{T}(X \theta-y)} \\ {=\frac{1}{2}\left(\theta^{T} X^{T}-y^{T}\right)(X \theta-y)} \\ {=\frac{1}{2}\left(\theta^{T} X^{T} X \theta-\theta^{T} X^{T} y-y^{T} X \theta-y^{T} y\right)}\end{array}
J(θ)=21(Xθ−y)T(Xθ−y)=21(θTXT−yT)(Xθ−y)=21(θTXTXθ−θTXTy−yTXθ−yTy)
接下来对
J
(
θ
)
J(\theta)
J(θ)偏导,需要用到以下几个矩阵的求导法则:
d A B d B = A T d X T A X d X = 2 A X \begin{array}{l}{\frac{d A B}{d B}=A^{T}} \\ {\frac{d X^{T} A X}{d X}=2 A X}\end{array} dBdAB=ATdXdXTAX=2AX
所以有:
∂
J
(
θ
)
∂
θ
=
1
2
(
2
X
T
X
θ
−
X
T
y
−
(
y
T
X
)
T
−
0
)
=
1
2
(
2
X
T
X
θ
−
X
T
y
−
X
T
y
−
0
)
=
X
T
X
θ
−
X
T
y
\begin{array}{l}{\frac{\partial J(\theta)}{\partial \theta}=\frac{1}{2}\left(2 X^{T} X \theta-X^{T} y-\left(y^{T} X\right)^{T}-0\right)} \\ {=\frac{1}{2}\left(2 X^{T} X \theta-X^{T} y-X^{T} y-0\right)} \\ {=X^{T} X \theta-X^{T} y}\end{array}
∂θ∂J(θ)=21(2XTXθ−XTy−(yTX)T−0)=21(2XTXθ−XTy−XTy−0)=XTXθ−XTy
令,
∂
J
(
θ
)
∂
θ
=
0
\frac{\partial J(\theta)}{\partial \theta}=0
∂θ∂J(θ)=0,则有
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=\left(X^{T} X\right)^{-1} X^{T} y
θ=(XTX)−1XTy