拉普拉斯特征图降维及其python实现

转载 2018年04月16日 23:46:11

这种方法假设样本点在光滑的流形上,这一方法的计算数据的低维表达,局部近邻信息被最优的保存。以这种方式,可以得到一个能反映流形的几何结构的解。

步骤一:构建一个图G=(V,E),其中V={vii=1,2,3…n}是顶点的集合,E={eij}是连接顶点的vivj边,图的每一个节点vi与样本集X中的一个点xi相关。如果xixj相距较近,我们就连接vivj。也就是说在各自节点插入一个边eij,如果Xjxik领域中,k是定义参数。

步骤二:每个边都与一个权值Wij相对应,没有连接点之间的权值为0,连接点之间的权值:

clip_image002[4]

步骤三:令clip_image004[4]实现广义本征分解:

clip_image006[4]

使clip_image008[4]是最小的m+1个本征值。忽略与clip_image010[4]=0相关的本征向量,选取另外m个本征向量即为降维后的向量。

1python实现拉普拉斯降维

[python] view plain copy
  1. def laplaEigen(dataMat,k,t):  
  2.     m,n=shape(dataMat)  
  3.     W=mat(zeros([m,m]))  
  4.     D=mat(zeros([m,m]))  
  5.     for i in range(m):  
  6.         k_index=knn(dataMat[i,:],dataMat,k)  
  7.         for j in range(k):  
  8.             sqDiffVector = dataMat[i,:]-dataMat[k_index[j],:]  
  9.             sqDiffVector=array(sqDiffVector)**2  
  10.             sqDistances = sqDiffVector.sum()  
  11.             W[i,k_index[j]]=math.exp(-sqDistances/t)  
  12.             D[i,i]+=W[i,k_index[j]]  
  13.     L=D-W  
  14.     Dinv=np.linalg.inv(D)  
  15.     X=np.dot(D.I,L)  
  16.     lamda,f=np.linalg.eig(X)  
  17. return lamda,f  
  18. def knn(inX, dataSet, k):  
  19.     dataSetSize = dataSet.shape[0]  
  20.     diffMat = tile(inX, (dataSetSize,1)) - dataSet  
  21.     sqDiffMat = array(diffMat)**2  
  22.     sqDistances = sqDiffMat.sum(axis=1)  
  23.     distances = sqDistances**0.5  
  24.     sortedDistIndicies = distances.argsort()      
  25. return sortedDistIndicies[0:k]  
  26. dataMat, color = make_swiss_roll(n_samples=2000)  
  27. lamda,f=laplaEigen(dataMat,11,5.0)  
  28. fm,fn =shape(f)  
  29. print 'fm,fn:',fm,fn  
  30. lamdaIndicies = argsort(lamda)  
  31. first=0  
  32. second=0  
  33. print lamdaIndicies[0], lamdaIndicies[1]  
  34. for i in range(fm):  
  35.     if lamda[lamdaIndicies[i]].real>1e-5:  
  36.         print lamda[lamdaIndicies[i]]  
  37.         first=lamdaIndicies[i]  
  38.         second=lamdaIndicies[i+1]  
  39.         break  
  40. print first, second  
  41. redEigVects = f[:,lamdaIndicies]  
  42. fig=plt.figure('origin')  
  43. ax1 = fig.add_subplot(111, projection='3d')  
  44. ax1.scatter(dataMat[:, 0], dataMat[:, 1], dataMat[:, 2], c=color,cmap=plt.cm.Spectral)  
  45. fig=plt.figure('lowdata')  
  46. ax2 = fig.add_subplot(111)  
  47. ax2.scatter(f[:,first], f[:,second], c=color, cmap=plt.cm.Spectral)  
  48. plt.show()  

2、拉普拉斯降维实验

用如下参数生成实验数据存在swissdata.dat里面:

[python] view plain copy
  1. def make_swiss_roll(n_samples=100, noise=0.0, random_state=None):  
  2.     #Generate a swiss roll dataset.  
  3.     t = 1.5 * np.pi * (1 + 2 * random.rand(1, n_samples))  
  4.     x = t * np.cos(t)  
  5.     y = 83 * random.rand(1, n_samples)  
  6.     z = t * np.sin(t)  
  7.     X = np.concatenate((x, y, z))  
  8.     X += noise * random.randn(3, n_samples)  
  9.     X = X.T  
  10.     t = np.squeeze(t)  
  11. return X, t  

实验结果如下:

N=5t=15             N=7t=15            N=9t=15

clip_image012[4]clip_image014[4]clip_image016[4]

N=11t=15             N=13t=15            N=15t=15

clip_image018[4]clip_image020[4]clip_image022[4]

N=17t=15             N=19t=15            N=21t=15

clip_image024[4]clip_image026[4]clip_image028[4]

N=23t=15             N=25t=15            N=27t=15

clip_image030[4]clip_image032[4]clip_image034[4]

N=29t=15             N=31t=15            N=33t=15

 

clip_image036[4]clip_image038[4]clip_image040[4]

N=25t=5              N=25t=8           N=25t=10

clip_image042[4]clip_image044[4]clip_image046[4]

N=25t=12            N=25t=14               N=25t=50

clip_image048[4]clip_image050[4]clip_image052[4]

N=25t=Inf

clip_image054[4]

非常见降维方法:Laplacian Eigenmaps 拉普拉斯特征映射

拉普拉斯矩阵Laplacian matrix 的定义谈到机器学习中的降维技术,可能大多数了解一点机器学习的朋友都知道PCA,今天为大家介绍一种新的降维方法——拉普拉斯特征映射 拉普拉斯矩阵(Lapl...
  • dylanzr
  • dylanzr
  • 2016-06-17 10:47:16
  • 6755

LE(拉普拉斯特征谱)

*LE算法 **基本思想 LE是Belkin和Niyogi在2002年提出的基于谱图理论的Laplacian特征映射算法。Belkin等人发现流形Laplician-Beltrami算子的特征函数...
  • PING_ASI
  • PING_ASI
  • 2017-06-12 14:12:12
  • 1035

拉普拉斯特征映射程序代码

  • 2012年09月07日 14:01
  • 2KB
  • 下载

降维算法(LASSO、PCA、聚类分析、小波分析、线性判别分析、拉普拉斯特征映射、局部线性嵌入)

1、LASSOLASSO全称least absolute shrinkage and selection operator,本身是一种回归方法。与常规回归方法不同的是,LASSO可以对通过参数缩减对参...
  • qrlhl
  • qrlhl
  • 2017-09-22 21:13:51
  • 800

拉普拉斯矩阵/映射/聚类

拉普拉斯矩阵是个非常巧妙的东西,它是描述图的一种矩阵,在降维,分类,聚类等机器学习的领域有很广泛的应用。...
  • yujianmin1990
  • yujianmin1990
  • 2015-09-13 20:56:01
  • 6922

拉普拉斯矩阵

1、拉普拉斯矩阵 拉普拉斯矩阵(Laplacian matrix) 也叫做导纳矩阵、基尔霍夫矩阵或离散拉普拉斯算子,主要应用在图论中,作为一个图的矩阵表示。 2、定义 3、示例...
  • xiaoshengforever
  • xiaoshengforever
  • 2013-12-03 13:17:06
  • 1225

python 实现数据降维推荐系统(附Python源码)

主成分分析原理:请点击PCA查看#!usr/bin/env python #_*_ coding:utf-8 _*_ import pandas as pd import numpy as np im...
  • HHTNAN
  • HHTNAN
  • 2017-11-07 19:39:13
  • 210

模式识别特征降维-PCA(Principal Component Analysis)

在进行图像的特征提取的过程中,提取的特征维数太多经常会导致特征匹配时过于复杂,消耗系统资源,不得不采用特征降维的方法。所谓特征降维,即采用一个低纬度的特征来表示高纬度。特征降维一般有两类方法:特征选择...
  • whu_zcj
  • whu_zcj
  • 2016-03-03 20:09:09
  • 1023

KPCA降维

KPCA方法是一种非线性主元分析方法,主要思想:通过某种事先选择的非线性映射函数Ф将输入矢量X映射到一个高维线性特征空间F之中,然后在空间F中使用PCA方法计算主元成分,核主成分分析最主要是非线性映射...
  • m_1031798928
  • m_1031798928
  • 2015-09-07 16:43:04
  • 3352

【机器学习】关于t-sne:降维、可视化

关于t-sne:降维、可视化机器学习中,我们的使用的数据基本都是高维的,所以我们很难直接从数据中观察分布和特征。因此出现了很多数据降维的手段帮助我们提取特征和可视化数据。这就是流行学习方法(Manif...
  • u013106893
  • u013106893
  • 2017-06-05 14:30:48
  • 891
收藏助手
不良信息举报
您举报文章:拉普拉斯特征图降维及其python实现
举报原因:
原因补充:

(最多只允许输入30个字)