高维数据降维之拉普拉斯特征映射 LE
高维数据降维是指采用某种映射方法,降低随机变量的数量,例如将数据点从高维空间映射到低维空间中,从而实现维度减少。
降维分为:特征选择 和 特征提取
特征选择:是从含有冗余信息以及噪声信息的数据中找出主要变量;
特征提取:是去掉原来的数据,生成新的变量,可以寻找数据内部的本质结构特征。
降维的过程是通过对输入的原始数据特征进行学习,得到一个映射函数,实现将输入样本映射后到低维空间中之后,原始数据特征并没有明显的损失,通常情况下新空间的维度要小于原空间的维度。目前大部分降维算法是处理向量形式的数据。
拉普拉斯特征映射 LE
拉普拉斯特征映射 LE 解决问题的思路和 LLE 相似,是一种基于图的降维算法,使相互关联的点在降维后的空间中尽可能地靠近。
通过构建邻接矩阵为 WWW 的图来重构数据流形的局部结构特征,如果两个数据实例 iii 和 jjj 很相似,那么 iii 和 jjj 在降维后目标子空间中也应该接近。设数据实例的数目为 nnn ,目标子空间(即降维后的维度)为 mmm ,定义 n×mn\times mn×m 大小的矩阵 YYY ,其中每一个行向量 yiy_iyi 是数据实例 iii 在目标子空间中的向量表示。为了让样本 iii 和 jjj 在降维后的子空间里尽量接近,优化的目标函数为:
min∑∣∣yi−yj∣∣2wijmin\sum||y_{i}-y_{j}||^{2}w_{ij}min∑∣∣yi−yj∣∣2wij ,也就是 i 和 j 距离平方求和乘以权重的最小值!
权重值可以是图中样本间的连接数来度量。
化简: Ly=λDy L_{y} = \lambda D_{y}Ly=λDy
其中 L 和 D 均为对称矩阵,由于目标函数是求最小值,所以通过求得 m 个最小非零特征值所对应的特征向量,即可达到降维的目的。
拉普拉斯特征映射基本步骤:
(1) 构建无向图,将所有的样本以点连接成一个图,例如使用 KNN 算法,将每个点最近的 k 个点进行连接,其中 k 是自己设定的值;
(2) 构建图的权值矩阵,通过点之间的关联程度来确定点与点之间的权重大小,例如,两个点之间如果相连接,则权重为1,否则为0;
(3) 特征映射,通过公式 Ly=λDyL_{y} = \lambda D_{y}Ly=λDy 计算拉普拉斯矩阵 L 的特征向量和特征值,用最小的 m 个非零特征值对应的特征向量作为降维的结果。
例子
# 例子:
from sklearn import manifold, datasets
import numpy as np
import matplotlib.pyplot as plt
X,color = datasets.make_swiss_roll(n_samples = 1500)
ax = plt.subplot(projection = '3d')
# 原始数据
ax.scatter(X[:,0],X[:,1],X[:,2],c = color, cmap=plt.cm.Spectral)
# 调整三维视角
ax.view_init(4,-50)
# 2维10个近邻点
se = manifold.SpectralEmbedding(n_components=2,n_neighbors=10)
# 将原始样本投射到新的子空间中
Y = se.fit_transform(X)
# LE 降维后可视化
plt.scatter(Y[:,0],Y[:,1],c=color,cmap=plt.cm.Spectral)
对比原始样本在三维空间和降维之后在二维空间的分布情况,可以看到,在高维和低维空间中的样本分布形状发生了变化,但降维后样本之间的联系并没有改变!!!