线性回归的N种姿势
1. Naive Solution
We want to find that minimizes:
Another way to think about this is that we are interested in where vector is closest to the subspace spanned by (called the range of ). is the projection of onto . Since must be perpendicular to the subspace spanned by , we see that
(we are using because we want to multiply each column of by
This leads us to the normal equations:
但是这种方法不是很practical,因为要求矩阵的逆,比较麻烦。
def ls_naive(A, b):
# not practical,因为直接求了矩阵的逆,很麻烦
return np.linalg.inv(A.T @ A) @ A.T @ b
coeffs_naive = ls_naive(trn_int, y_trn)
regr_metrics(y_test, test_int @ coeffs_naive)
2. Cholesky Factorization
Normal equations:
If has full rank, the pseudo-inverse is a square, hermitian positive definite matrix.
【注意】Cholesky一定要是正定矩阵!虽然这个操作又快又好,但是使用场景有限!
The standard way of solving such a system is Cholesky Factorization, which finds upper-triangular R such that . ( is lower-triangular )
AtA = A.T @ A
Atb = A.T @ b
R = scipy.linalg.cholesky(AtA)
# check our factorization
np.linalg.norm(AtA - R.T @ R)
Q:为啥变成 会变简单?
之前提过,上三角矩阵解线性方程组时会简单许多(最后一行只有一个未知数)。
所以先求 再求 会easier。
def ls_chol(A, b):
R = scipy.linalg.cholesky(A.T @ A)
w = scipy.linalg.solve_triangular(R, A.T @ b, trans='T')
return scipy.linalg.solve_triangular(R, w)
%timeit coeffs_chol = ls_chol(trn_int, y_trn)
3. QR Factorization
is orthonormal, is upper-triangular.
Then once again, is easier to solve than .
def ls_qr(A,b):
Q, R = scipy.linalg.qr(A, mode='economic')
return scipy.linalg.solve_triangular(R, Q.T @ b)
coeffs_qr = ls_qr(trn_int, y_trn)
regr_metrics(y_test, test_int @ coeffs_qr)
4. SVD
都是同样的问题,要求 。 的column orthonormal, 是对角阵, 是row orthonormal.
解 甚至比上三角矩阵 更简单(每行只有一个未知量)。然后 又可以直接用orthonormal的性质,直接等于 。
SVD gives the pseudo-inverse.
def ls_svd(A,b):
m, n = A.shape
U, sigma, Vh = scipy.linalg.svd(A, full_matrices=False, lapack_driver='gesdd')
w = (U.T @ b)/ sigma
return Vh.T @ w
coeffs_svd = ls_svd(trn_int, y_trn)
regr_metrics(y_test, test_int @ coeffs_svd)
5. Timing Comparison
Matrix Inversion:
Matrix Multiplication:
Cholesky:
QR, Gram Schmidt: , (chapter 8 of Trefethen)
QR, Householder: (chapter 10 of Trefethen)
Solving a triangular system:
Why Cholesky Factorization is Fast:
(source: Stanford Convex Optimization: Numerical Linear Algebra Background Slides)
上一篇: 开机自启动的设置
下一篇: 任星辰:第二次个人作业