
训练模型
|
113
array([[4.21509616],
[2.77011339]])
伪逆本身是使用被称为奇异值分解(Singular Value Decomposition,SVD)的标准矩阵分
解技术来计算的,可以将训练集矩阵
X
分解为三个矩阵
U Σ V
T
的乘积(请参阅 numpy.
linalg.svd())。伪逆的计算公式为
X
+
=
V
Σ
+
U
T
。为了计算矩阵
Σ
+
,该算法取
Σ
并
将所有小于一个小阈值的值设置为零,然后将所有非零值替换成它们的倒数,最后把结
果矩阵转置。这种方法比计算标准方程更有效,再加上它可以很好地处理边缘情况:的
确,如果矩阵
X
T
X
是不可逆的(即奇异的),标准方程可能没有解,例如
m
<
n
或某些
特征是多余的,但伪逆总是有定义的。
4.1.2 计算复杂度
标准方程计算
X
T
X
的逆,
X
T
X
是一个 (
n
+ 1)
×
(
n
+ 1) 的矩阵(
n
是特征数量)。对这种
矩阵求逆的计算复杂度通常为
O
(
n
2.4
) 到
O
(
n
3
) 之间,取决于具体实现。换句话说,如果
将特征数量翻倍,那么计算时间将乘以大约 2
2.4
= 5.3 倍到 2
3
= 8 倍之间。
Scikit-Learn 的 LinearRegression 类使用的 SVD 方法的复杂度约为
O
(
n
2
)。如果你将
特征数量加倍,那计算时间大约是原来的 4 倍。
特征数量比较大(例如 100 000)时,标准方程和 SVD 的计算将极其缓
慢。好的一面是,相对于训练集中的实例数量(
O
(
m
))来说,两个都是线
性的,所以能够有效地处理大量的训练集,只要内存足够。 ...