R 数据科学的线性代数
Eric Eager
Data Scientist at Pro Football Focus
矩阵 $A^T$,即 $A$ 的转置,通过交换 $A$ 的行和列得到。
若数据集为矩阵 $A$,且每列都已减去该列均值,则矩阵
$$\frac{A^TA}{n - 1}$$
的第 $i,j$ 个元素(其中 $n$ 为 $A$ 的行数)为矩阵中第 $i$ 列与第 $j$ 列变量的协方差。
因此,$\frac{A^TA}{n - 1}$ 的对角线第 $i$ 个元素是矩阵第 $i$ 列的方差。
print(A)
[,1] [,2]
[1,] 1 2
[2,] 2 4
[3,] 3 6
[4,] 4 8
[5,] 5 10
A[, 1] <- A[, 1] - mean(A[, 1])
A[, 2] <- A[, 2] - mean(A[, 2])
print(A)
[,1] [,2]
[1,] -2 -4
[2,] -1 -2
[3,] 0 0
[4,] 1 2
[5,] 2 4
t(A)%*%A/(nrow(A) - 1)
[,1] [,2]
[1,] 2.5 5
[2,] 5.0 10
cov(A[, 1], A[, 2])
5
var(A[, 1])
2.5
var(A[, 2])
10
$\frac{A^TA}{n - 1}$ 的特征值 $\lambda_1, \lambda_2, ... , \lambda_n$ 为实数,其对应特征向量两两正交,指向不同方向。
数据集的总方差等于 $\frac{A^TA}{n - 1}$ 的特征值之和。
这些特征向量 $v_1, v_2, ..., v_n$ 称为矩阵 $A$ 的主成分。
向量 $v_j$ 的方向可解释数据中的 $\lambda_j$ 的总方差。若 $\lambda_j$,或 $\lambda_1, \lambda_2, ... , \lambda_n$ 的某个子集能解释大量总方差,则可进行降维。
eigen(t(A)%*%A/(nrow(A) - 1))
eigen() 分解
$`values`
[1] 12.5 0.0
$vectors
[,1] [,2]
[1,] 0.4472136 -0.8944272
[2,] 0.8944272 0.4472136
R 数据科学的线性代数