高维数据降维之局部线性嵌入 LLE
高维数据降维是指采用某种映射方法,降低随机变量的数量,例如将数据点从高维空间映射到低维空间中,从而实现维度减少。
降维分为:特征选择 和 特征提取
特征选择:是从含有冗余信息以及噪声信息的数据中找出主要变量;
特征提取:是去掉原来的数据,生成新的变量,可以寻找数据内部的本质结构特征。
降维的过程是通过对输入的原始数据特征进行学习,得到一个映射函数,实现将输入样本映射后到低维空间中之后,原始数据特征并没有明显的损失,通常情况下新空间的维度要小于原空间的维度。目前大部分降维算法是处理向量形式的数据。
局部线性嵌入 LLE
流形学习是机器学习中的一种维数约简方法,将高维数据映射到低维,并依然能够反映原高维数据的本质结构特征。
流形学习的前提是假设某些高维数据实际是 一种低维的流形结构嵌入到高维空间中。
流形学习分为线性流形算法和非线性流形算法,线性流形算法包括 主成分分析 PCA 和线性判别分析 LDA ,非线性流形算法包括局部线性嵌入 LLE 、拉普拉斯特征映射 LE 等等。
局部线性嵌入是一种典型的非线性降维算法,这一算法要求每一个数据点都可以由其近邻点的线性加权组合构造得到,从而使得降维后的数据也能基本保持原有流形结构。它是流形学习方法最经典的工作之一,后续的很多流形学习、降维方法都与其有密切联系。
局部线性嵌入寻求数据的低维投影,保留本地领域内的距离。它可以被认为是一系列局部主成分分析,被全局比较以找到最佳的非线性嵌入。
局部线性嵌入基本步骤:
(1) 首先寻找每个样本点的 k 个近邻点;
(2) 由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;
(3) 由该样本点的局部重建权值矩阵和近邻点计算出该样本点的输出值。
LLE 在有些情况下也并不适用,例如数据分布在整个封闭的球面上,LLE 则不能将它映射到二维空间,且不能保持原有的数据流形。因此在处理数据的时候,需要确保数据不是分布在闭合的球面或者椭圆面上。
例子:
# 例子:
from sklearn import manifold, datasets
import numpy as np
import matplotlib.pyplot as plt
X,color = datasets.make_swiss_roll(n_samples = 1500)
# 10个近邻点,降到2维
X_r,err = manifold.locally_linear_embedding(X,n_neighbors=10,n_components=2)
ax = plt.subplot(projection = '3d')
# 原始数据
ax.scatter(X[:,0],X[:,1],X[:,2],c = color, cmap=plt.cm.Spectral)
# 投射数据
plt.scatter(X_r[:,0],X_r[:,1],c = color, cmap=plt.cm.Spectral)
经过 LLE 变换后,样本数据在低维空间上已经明显区分出来。