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 相关文章推荐
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python内置函数OCT详解
Nov 09 Python
Python文件和流(实例讲解)
Sep 12 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
我就是这样学习Python中的列表
Jun 02 Python
安装PyInstaller失败问题解决
Dec 14 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
详解如何修改python中字典的键和值
Sep 29 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
详解Python中*args和**kwargs的使用
Apr 07 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 事务处理数据实现代码
2010/05/13 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
php存储过程调用实例代码
2013/02/03 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
python实现爬取图书封面
2018/07/05 Python
python实现数据分析与建模
2019/07/11 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
使用python实现画AR模型时序图
2019/11/20 Python
详细分析Python collections工具库
2020/07/16 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
JPA的优势都有哪些
2013/07/04 面试题
大学生应聘推荐信范文
2013/11/19 职场文书
小学毕业寄语大全
2014/04/03 职场文书
课外访万家心得体会
2014/09/03 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript