通过降维 (Dimensionality Reduction),实现数据压缩以减少计算、存储成本,或实现数据可视化以直观了解数据。
1. 数据预处理
特征缩放及标准化 (feature scaling / mean normalization):
x(i)j=x(i)j−μjsj
其中
μj=1m∑i=1mx(i)j
,即
xj
的平均值
sj=max(xj)−min(xj)
,即
xj
中最大、最小值之差
2. 算法实现
要将数据从n维降至k维( x(i)∈Rn→z(i)∈Rk ):
计算协方差矩阵 (covariance matrix):
* 为避免
Σ,∑
(Sigma与求和符号)混淆,此处的
Σ
用
Sigma
表示
Sigma=1m∑i=1n(x(i))(x(i))T
计算Sigma矩阵的特征向量 (eigenvectors):
[U,S,V]=svd(Sigma)
可得
U=⎡⎣⎢| | |u(1) u(2) ... u(n)| | |⎤⎦⎥∈Rn×n
从中选出前k列:
Ureduce=⎡⎣⎢| | |u(1) u(2) ... u(k)| | |⎤⎦⎥∈Rn×k
最后:
z(i)=(Ureduce)Tx(i)
3. k值选择
[U,S,V]=svd(Sigma)
中,S为对角矩阵:
S=diag(S11,S22,...,Snn)
计算满足 ∑ki=1Sii∑mi=1Sii≥0.99 的最小的k值,即为k的取值。
其中0.99可理解为保留99%的数据差异性,可根据实际情况调整。