流形学习(Manifold Learning)简单介绍

传统的机器学习方法中,数据点和数据点之间的距离和映射函数f都是定义在欧式空间中的,然而在实际情况中,这些数据点可能不是分布在欧式空间中的,因此传统欧式空间的度量难以用于真实世界的非线性数据,从而需要对数据的分布引入新的假设。

流形(Manifold)是局部具有欧式空间性质的空间,包括各种纬度的曲线曲面,例如球体、弯曲的平面等。流形的局部和欧式空间是同构的。

流形是线性子空间的一种非线性推广。

拓扑学角度:局部区域线性,与低维欧式空间拓扑同胚(连续的变换最后都能变成一样的两个物体,称为同胚,Homeomorphism)。

微分几何角度:有重叠chart的光滑过渡(把流体的任何一个微小的局部看作是欧几里德空间,称为一个chart)。

黎曼流形就是以光滑的方式在每一点的切空间上指定了欧式内积的微分流形。

什么是流形学习

流形学习假设所处理的数据点分布在嵌入于外维欧式空间的一个潜在的流形体上,或者说这些数据点可以构成这样一个潜在的流形体。

假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。它是从观测到的现象中去寻找事物的本质,找到产生数据的内在规律。

image

常用方法介绍

这些流形学习方法具有一些共同的特征:首先构造流形上样本点的局部邻域结构,然后用这 些局部邻域结构来将样本点全局的映射到一个低维空间。它们之间的不同之处主要是在于构 造的局部邻域结构不同以及利用这些局部邻域结构来构造全局的低维嵌入方法的不同。

image

ISOMAP(Isometric feature mapping)

ISOMAP引入测地线距离来表示潜在流形上点与点之间的距离,并在降维过程中保持该距离不变。

保持全局测地距离: 测地距离反映数据在流形上的真实距离差异。

等距映射: 基于线性算法MDS,采用“测地距离”作为数据差异度量。

多维尺度变换(MDS)

MDS是一种非监督的维数约简方法。

MDS的基本思想:约简后低维空间中任意两点间的距离应该与它们在原高维空间中的距离相同。

MDS的求解:通过适当定义准则函数来体现在低位空间中对高维距离的重建误差,对准则函数用梯度下降法求解,对于某些特殊的距离可以推导出解析解法。

MDS的目标是在降维的过程中将数据的dissimilarity(差异性)保持下来,也可以理解降维让高维空间中的距离关系与低维空间中距离关系保持不变。

这里的距离用矩阵表示,N个样本的两两距离用矩阵A的每一项undefined表示,并且假设在低维空间中的距离是欧式距离。而降维后的数据表示为undefined,那么就有undefined,右边的三项统一用内积矩阵E来表示undefined,去中心化之后,E的每一行每一列之和都是0,从而可以推导得出:

undefined

其中undefined单位矩阵I减去全1矩阵的1/N,i⋅与⋅j是指某列或者某列总和,从而建立了距离矩阵A与内积矩阵E之间的关系。因而在知道A情况下就能够求解出E,进而通过对E做特征值分解,令undefined,其中Λ是对角矩阵,每一项都是E的特征值λ1≥…≥λdλ1≥…≥λd,那么在所有特征值下的数据就能表示成undefined,当选取d个最大特征值就能让在d维空间的距离矩阵近似高维空间D的距离矩阵,从而MDS流程如下:

输入: 距离矩阵undefined,上标表示矩阵大小,原始数据是D维,降维到d维。

输出: 降维后的矩阵undefined

目标:降维的同时保证数据之间的相对关系不变。

假设:已知N个样本的距离矩阵

  1. 计算出undefined

  2. 计算内积矩阵E

  3. 对E做特征值分解

  4. 取d个最大特征值构成undefined,对应的特征向量按序排列构成undefined

测地距离

测地线:流形上连接两个点的最短曲线。

图逼近测地距离

image

ISOMAP算法流程

  1. 计算每个点的近邻点。

  2. 在样本集上定义一个赋权无向图,如果 undefinedundefined互为近邻点,则边的权值为undefined

  3. 计算图中两点间的最短距离,记所得的距离矩阵为undefined

  4. 用MDS求低维嵌入坐标,

    undefined

    低维嵌入是undefined的第1大到第d大的特征值所对应的特征向量。

ISOMAP MATLAB实例

源代码及数据集下载地址

调用ISOMAP作用在swiss_roll_data数据集上:

>> load swiss_roll_data

>> D = L2_distance(X_data(:,1:1000), X_data(:,1:1000), 1); 

>> options.dims = 1:10;

>> options.landmarks = 1:50; 

>> [Y, R, E] = IsomapII(D, 'k', 7, options);

结果:

image

image

summary

前提假设

  1. 数据所在的低维流形与欧式空间的一个子集整体等距。

  2. 该欧式空间的子集是一个凸集。

思想核心

  1. 较近点对之间的测地距离用欧式距离代替。

  2. 较远点对之间的测地距离用最短路径来逼近。

算法特点

  1. 适用于学习内部平坦的低维流形。

  2. 不适用于学习有较大内在曲率的流形。

  3. 计算点对间的最短路径比较耗时。

LLE(Locally linear embedding)

  1. 显式利用“局部线性”的假设,流形学习的局部区域具有欧式空间的性质,那么在LLE中就假设某个点xi坐标可以由它周围的一些点的坐标线性组合求出。

  2. 保持局部邻域几何结构-重构权重。

  3. 权重对样本集的几何变幻具有不变性。

前提假设

  1. 采样数据所在的低维流形在局部是线性的。

  2. 每个采样点均可以利用其近邻样本进行线性重构表示。

学习目标

  1. 低维空间中保持每个邻域中的重构权值不变。

  2. 在嵌入映射为局部线性的条件下,最小化重构误差。

  3. 最终形式化为特征值分解问题。

优点

  1. 算法可以学习任意维的局部线性的低维流形

  2. 算法归结为稀疏矩阵特征值计算,计算复杂度相对较小。

  3. 降维过程中保持了数据的局部拓扑结构。

缺点

  1. 算法所学习的流形只能是不闭合的。

  2. 算法要求样本在流形上是稠密采样的。

  3. 算法对样本中的噪声和邻域参数比较敏感。

LLE算法流程

算法的主要步骤分为三步:

(1)寻找每个样本点的k个近邻点;

(2)由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;

(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。

Input X: D by N matrix consisting of N data items in D dimensions.

Output Y: d by N matrix consisting of d < D dimensional embedding coordinates for the input points.

1. Find neighbours in X space [b,c].
for i=1:N
  compute the distance from Xi to every other point Xj
  find the K smallest distances 
  assign the corresponding points to be neighbours of Xi
end

2. Solve for reconstruction weights W.
for i=1:N
  create matrix Z consisting of all neighbours of Xi [d]
  subtract Xi from every column of Z
  compute the local covariance C=Z'*Z [e]
  solve linear system C*w = 1 for w [f]
  set Wij=0 if j is not a neighbor of i
  set the remaining elements in the ith row of W equal to w/sum(w);
end

3. Compute embedding coordinates Y using weights W.
create sparse matrix M = (I-W)'*(I-W)
find bottom d+1 eigenvectors of M
  (corresponding to the d+1 smallest eigenvalues) 
set the qth ROW of Y to be the q+1 smallest eigenvector
  (discard the bottom eigenvector [1,1,1,1...] with eigenvalue zero)

image

LLE matlab代码

% LLE ALGORITHM (using K nearest neighbors)
%
% [Y] = lle(X,K,dmax)
%
% X = data as D x N matrix (D = dimensionality, N = #points)
% K = number of neighbors
% dmax = max embedding dimensionality
% Y = embedding as dmax x N matrix

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [Y] = lle(X,K,d)

[D,N] = size(X);
fprintf(1,'LLE running on %d points in %d dimensions\n',N,D);


% STEP1: COMPUTE PAIRWISE DISTANCES & FIND NEIGHBORS 
fprintf(1,'-->Finding %d nearest neighbours.\n',K);

X2 = sum(X.^2,1);
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;

[sorted,index] = sort(distance);
neighborhood = index(2:(1+K),:);



% STEP2: SOLVE FOR RECONSTRUCTION WEIGHTS
fprintf(1,'-->Solving for reconstruction weights.\n');

if(K>D) 
  fprintf(1,'   [note: K>D; regularization will be used]\n'); 
  tol=1e-3; % regularlizer in case constrained fits are ill conditioned
else
  tol=0;
end

W = zeros(K,N);
for ii=1:N
   z = X(:,neighborhood(:,ii))-repmat(X(:,ii),1,K); % shift ith pt to origin
   C = z'*z;                                        % local covariance
   C = C + eye(K,K)*tol*trace(C);                   % regularlization (K>D)
   W(:,ii) = C\ones(K,1);                           % solve Cw=1
   W(:,ii) = W(:,ii)/sum(W(:,ii));                  % enforce sum(w)=1
end;


% STEP 3: COMPUTE EMBEDDING FROM EIGENVECTS OF COST MATRIX M=(I-W)'(I-W)
fprintf(1,'-->Computing embedding.\n');

% M=eye(N,N); % use a sparse matrix with storage for 4KN nonzero elements
M = sparse(1:N,1:N,ones(1,N),N,N,4*K*N); 
for ii=1:N
   w = W(:,ii);
   jj = neighborhood(:,ii);
   M(ii,jj) = M(ii,jj) - w';
   M(jj,ii) = M(jj,ii) - w;
   M(jj,jj) = M(jj,jj) + w*w';
end;

% CALCULATION OF EMBEDDING
options.disp = 0; options.isreal = 1; options.issym = 1; 
[Y,eigenvals] = eigs(M,d+1,0,options);
Y = Y(:,2:d+1)'*sqrt(N); % bottom evect is [1,1,1,1...] with eval 0


fprintf(1,'Done.\n');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% other possible regularizers for K>D
%   C = C + tol*diag(diag(C));                       % regularlization
%   C = C + eye(K,K)*tol*trace(C)*K;                 % regularlization

LLE学习实例

调用上述LLE代码,作用在swiss_roll_data数据集中。

image

image

拉普拉斯特征映射(Laplacian Eigenmap)

基本思想

在高维空间中离的很近的点投影到低维空间中也应该离得很紧。

LE方法在黎曼几何的框架内,用邻接图来描述一个流形,并在映射到低维空间的过程中,保持了图的局部邻接关系。

LE的基本思想就是用一个无向有权图来描述一个流形,然后通过用图的嵌入(graph embedding)来找低维表示。简单来说,就是保持图的局部邻接关系的情况把这个图从高维空间中重新画在一个低维空间中(graph drawing)。

求解方法

求解图拉普拉斯算子的广义特征值问题。

优点

算法是局部非线性方法,与谱图理论有很紧密的联系。

算法通过求解稀疏矩阵的特征值问题解析的求出整体最优解,效率非常高。

算法使原空间中离得很近的点在低维空间中也离得很近,可以用于聚类。

缺点

对算法参数和数据采样密度比较敏感。

不能有效保持流形的全局几何结构。

拉普拉斯算子

image

图上的拉普拉斯算子

image

Laplacian Eigenmap算法流程

  1. 从样本点构建一个近邻图,图的顶点为样本点,离得很近的两点用边相连。(K近邻或undefined邻域)。

  2. 给每条边赋予权值,如果第i个点和第j个点不相连,权值为0,否则权值为1.

  3. 计算图拉普拉斯算子的广义特征向量,求得低维嵌入。

    令D为对角矩阵,undefined,L是近邻图上的拉普拉斯算子,求解广义特征值问题undefined

LTSA 算法

LTSA 采取先局部拟合再全局排列的思想,首先利用PCA求得各个样本邻域的近似切空间
,然后利用排列技术将各个切空间上的投影坐标进行全局排列来求得低维嵌入表示。给定采样于d维流形M的D维样本集 X = {x1,x2 ……,xn), d < D,N维样本个数,LTSA算法按照如下步骤求解低维嵌入:

(1) 邻域选择。 对每个样本xi,选择与其最近的k个样本(包括xi在内)构成局部邻域Xi。

(2) 基于PCA计算局部坐标。对局部邻域Xi,求投影矩阵V使得各样本到其投影的距离之和最小:

image

image

对Swiss Roll数据进行稠密采样(2000个样本点)和稀疏采样(400)个样本点后运行LTSA算法的二维嵌入结果。

image

稠密采样下能够较好的保持原始数据的拓扑几何结果。

而稀疏采样下的地位嵌入结果则较为杂乱,无法反映数据的几何结构。

参考资料

[1]中科院计算所,《流形学习专题》。

[2]浙江大学,何晓飞,《机器学习的几何观点》。

[3]简述多种降维方法

[4]Sam T. Roweis & Lawrence K. Saul,Locally Linear Embedding,

[5]J. B. Tenenbaum, V. de Silva and J. C. Langford, A Global Geometric Framework for Nonlinear
Dimensionality Reduction

展开阅读全文

没有更多推荐了,返回首页