python实现拉普拉斯特征图降维示例


Posted in Python onNovember 25, 2019

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

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

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

python实现拉普拉斯特征图降维示例

步骤三:python实现拉普拉斯特征图降维示例 ,实现广义本征分解:

python实现拉普拉斯特征图降维示例

使python实现拉普拉斯特征图降维示例 是最小的m+1个本征值。忽略与 python实现拉普拉斯特征图降维示例 =0相关的本征向量,选取另外m个本征向量即为降维后的向量。

1、python实现拉普拉斯降维

def laplaEigen(dataMat,k,t): 
 m,n=shape(dataMat) 
 W=mat(zeros([m,m])) 
 D=mat(zeros([m,m])) 
 for i in range(m): 
 k_index=knn(dataMat[i,:],dataMat,k) 
 for j in range(k): 
  sqDiffVector = dataMat[i,:]-dataMat[k_index[j],:] 
  sqDiffVector=array(sqDiffVector)**2 
  sqDistances = sqDiffVector.sum() 
  W[i,k_index[j]]=math.exp(-sqDistances/t) 
  D[i,i]+=W[i,k_index[j]] 
 L=D-W 
 Dinv=np.linalg.inv(D) 
 X=np.dot(D.I,L) 
 lamda,f=np.linalg.eig(X) 
return lamda,f 
def knn(inX, dataSet, k): 
 dataSetSize = dataSet.shape[0] 
 diffMat = tile(inX, (dataSetSize,1)) - dataSet 
 sqDiffMat = array(diffMat)**2 
 sqDistances = sqDiffMat.sum(axis=1) 
 distances = sqDistances**0.5 
 sortedDistIndicies = distances.argsort() 
return sortedDistIndicies[0:k] 
dataMat, color = make_swiss_roll(n_samples=2000) 
lamda,f=laplaEigen(dataMat,11,5.0) 
fm,fn =shape(f) 
print 'fm,fn:',fm,fn 
lamdaIndicies = argsort(lamda) 
first=0 
second=0 
print lamdaIndicies[0], lamdaIndicies[1] 
for i in range(fm): 
 if lamda[lamdaIndicies[i]].real>1e-5: 
 print lamda[lamdaIndicies[i]] 
 first=lamdaIndicies[i] 
 second=lamdaIndicies[i+1] 
 break 
print first, second 
redEigVects = f[:,lamdaIndicies] 
fig=plt.figure('origin') 
ax1 = fig.add_subplot(111, projection='3d') 
ax1.scatter(dataMat[:, 0], dataMat[:, 1], dataMat[:, 2], c=color,cmap=plt.cm.Spectral) 
fig=plt.figure('lowdata') 
ax2 = fig.add_subplot(111) 
ax2.scatter(f[:,first], f[:,second], c=color, cmap=plt.cm.Spectral) 
plt.show()

2、拉普拉斯降维实验

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

def make_swiss_roll(n_samples=100, noise=0.0, random_state=None): 
 #Generate a swiss roll dataset. 
 t = 1.5 * np.pi * (1 + 2 * random.rand(1, n_samples)) 
 x = t * np.cos(t) 
 y = 83 * random.rand(1, n_samples) 
 z = t * np.sin(t) 
 X = np.concatenate((x, y, z)) 
 X += noise * random.randn(3, n_samples) 
 X = X.T 
 t = np.squeeze(t) 
return X, t

实验结果如下:

python实现拉普拉斯特征图降维示例

python实现拉普拉斯特征图降维示例

以上这篇python实现拉普拉斯特征图降维示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
简单了解Python3里的一些新特性
Jul 13 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
浅析使用Python搭建http服务器
Oct 27 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
tornado+celery的简单使用详解
Dec 21 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 #Python
Python3如何对urllib和urllib2进行重构
Nov 25 #Python
python pygame实现球球大作战
Nov 25 #Python
Python内置加密模块用法解析
Nov 25 #Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 #Python
Django项目基础配置和基本使用过程解析
Nov 25 #Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 #Python
You might like
PHP学习笔记之一
2011/01/17 PHP
PHP简洁函数小结
2011/08/12 PHP
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
Python中replace方法实例分析
2014/08/20 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python生成圆形图片的方法
2020/03/25 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python常用断言函数实例汇总
2020/11/30 Python
python openssl模块安装及用法
2020/12/06 Python
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
linux面试题参考答案(7)
2014/07/24 面试题
社区庆八一活动方案
2014/02/02 职场文书
个人四风问题整改措施
2014/10/24 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
医学生自荐信范文
2015/03/05 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书