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专用方法与迭代机制实例分析
Sep 15 Python
跟老齐学Python之Import 模块
Oct 13 Python
Python中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
python类中super()和__init__()的区别
Oct 18 Python
Python运算符重载详解及实例代码
Mar 07 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python super()方法原理详解
Mar 31 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
分享Python获取本机IP地址的几种方法
Mar 17 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二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php实现的http请求封装示例
2016/11/08 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
js的写法基础分析
2011/01/17 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
json的使用小结
2016/06/08 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python单元测试实例详解
2018/05/25 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
基于python绘制科赫雪花
2018/06/22 Python
Python列表(List)知识点总结
2019/02/18 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
电子信息专业应届生自荐信
2014/06/04 职场文书
售后服务承诺函格式
2015/01/21 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
MySQL如何解决幻读问题
2021/08/07 MySQL
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
vue的项目如何打包上线
2022/04/13 Vue.js