07 | 降维 ¶
约 377 个字 26 行代码 预计阅读时间 2 分钟
- dimensionality reduction tries to transform high-demensional data into a low-dimensioanl space while preserving the data structure.
- data might lie on low-dimensional manifolds.
维数诅咒
MDS | Multiple dimensional Scaling¶
第一步——求解距离矩阵 D
def get_distance_matrix(data):
expand_ = data[:, np.newaxis, :]
repeat1 = np.repeat(expand_, data.shape[0], axis=1)
repeat2 = np.swapaxes(repeat1, 0, 1)
D = np.linalg.norm(repeat1 - repeat2, ord=2, axis=-1, keepdims=True).squeeze(-1)
return D
第二步——求解内积矩阵 B
def get_matrix_B(D):
assert D.shape[0] == D.shape[1]
DD = np.square(D)
sum_ = np.sum(DD, axis=1) / D.shape[0]
Di = np.repeat(sum_[:, np.newaxis], D.shape[0], axis=1)
Dj = np.repeat(sum_[np.newaxis, :], D.shape[0], axis=0)
Dij = np.sum(DD) / ((D.shape[0])**2) * np.ones([D.shape[0], D.shape[0]])
B = (Di + Dj - DD- Dij) / 2
return B
第三步——求解 Z 矩阵
\(B = Z^T Z\)
def MDS(data, n=2):
D = get_distance_matrix(data)
B = get_matrix_B(D)
B_value, B_vector = np.linalg.eigh(B)
Be_sort = np.argsort(-B_value)
B_value = B_value[Be_sort] # 降序排列的特征值
B_vector = B_vector[:,Be_sort] # 降序排列的特征值对应的特征向量
Bez = np.diag(B_value[0:n])
Bvz = B_vector[:, 0:n]
Z = np.dot(np.sqrt(Bez), Bvz.T).T
return Z
PCA¶
第一阶段找了一个新的坐标系来表示数据,这个新的坐标系不是随便找的,是要求能最大限度的看出每个轴上的数据变化大小
第二阶段在新坐标系下取前 k 个变化最大的轴上的数据(最大特征值对应的轴
一文让你彻底搞懂主成成分分析 PCA 的原理及代码实现 ( 超详细推导 )_pca 主成分分析图解释 -CSDN 博客
【数据降维 - 第 4 篇】多维尺度变换(MDS)快速理解,及 MATLAB 实现 - 知乎
kernel PCA¶
PCA 和 SVD 的关系:
SVD:
$$ A = US V^T $$ U是特征向量,S是特征值,V是特征向量
协方差矩阵告诉我们变量的方差和联合方向
流形学习 ¶
LLE¶
原始空间到子空间
度量学习 ¶
距离 ¶
欧式距离:在每个方向上同等重要;有缘千里来相会;婺源对面手难牵
马氏距离: