等度量映射ISOMAP
2021-11-20 15:56
666 查看
简介
流形学习是一类借鉴了拓扑流形概念的降维方法。流形是在局部与欧式空间同胚的空间,换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算。若低维流形嵌入到高维空间中,则数据样本在高维空间的分布虽然看上去非常复杂,但在局部上仍具有欧式空间的性质,基于流形学习的降维正是这种“邻域保持”的思想。如此,可以在局部建立降维映射关系,然后再设法将局部映射推广到全局。当维数被降至二维或三维时,能对数据进行可视化展示。因此流形学习也可被用于可视化 。
Isomap算法
#最小路径这里采用Floyd算法:输入邻接矩阵,邻接矩阵中,除了邻域点之外,其余距离都是无穷大,输出完整的距离矩阵。 def floyd(D,n_neighbors=15): Max=numpy.max(D)*1000 n1,n2=D.shape k=n_neighbors D1=numpy.ones((n1,n1))*Max D_arg=numpy.argsort(D,axis=1) for i in range(n1): D1[i,D_arg[i,0:k+1]]=D[i,D_arg[i,0:k+1]] for k in xrange(n1): for i in xrange(n1): for j in xrange(n1): if D1[i,k]+D1[k,j]<D1[i,j]: D1[i,j]=D1[i,k]+D1[k,j] return D1 #其余是MDS的算法: def calculate_distance(x,y): d=numpy.sqrt(numpy.sum((x-y)**2)) return d def calculate_distance_matrix(x,y): d=metrics.pairwise_distances(x,y) return d def cal_B(D): (n1,n2)=D.shape DD=numpy.square(D) Di=numpy.sum(DD,axis=1)/n1 Dj=numpy.sum(DD,axis=0)/n1 Dij=numpy.sum(DD)/(n1**2) B=numpy.zeros((n1,n1)) for i in xrange(n1): for j in xrange(n2): B[i,j]=(Dij+DD[i,j]-Di[i]-Dj[j])/(-2) return B def MDS(data,n=2): D=calculate_distance_matrix(data,data) B=cal_B(D) Be,Bv=numpy.linalg.eigh(B) Be_sort=numpy.argsort(-Be) Be=Be[Be_sort] Bv=Bv[:,Be_sort] Bez=numpy.diag(Be[0:n]) Bvz=Bv[:,0:n] Z=numpy.dot(numpy.sqrt(Bez),Bvz.T).T return Z #合成Isomap算法: def Isomap(data,n=2,n_neighbors=30): D=calculate_distance_matrix(data,data) D_floyd=floyd(D) B=cal_B(D_floyd) Be,Bv=numpy.linalg.eigh(B) Be_sort=numpy.argsort(-Be) Be=Be[Be_sort] Bv=Bv[:,Be_sort] Bez=numpy.diag(Be[0:n]) Bvz=Bv[:,0:n] Z=numpy.dot(numpy.sqrt(Bez),Bvz.T).T return Z #生成数据集: def generate_curve_data(): xx,target=datasets.samples_generator.make_s_curve(400, random_state=9) return xx,target #调用函数: if __name__=='__main__': data,target=generate_curve_data() Z_Isomap=Isomap(data,n=2) Z_MDS=MDS(data) figure=pyplot.figure() pyplot.suptitle('ISOMAP COMPARE TO MDS') pyplot.subplot(1,2,1) pyplot.title('ISOMAP') pyplot.scatter(Z_Isomap[:,0],Z_Isomap[:,1],c=target,s=60) pyplot.subplot(1,2,2) pyplot.title('MDS') pyplot.scatter(Z_MDS[:,0],Z_MDS[:,1],c=target,s=60) pyplot.show()View Code
相关文章推荐
- 流形学习之等距特征映射(Isomap)
- ISOMAP(等规度映射方法)
- 2.1 度量空间与连续映射
- windows程序设计之绘图基础之度量映射模式
- windows程序设计之绘图基础之度量映射模式
- 流形学习之等距特征映射(Isomap)
- 流形学习之等距特征映射(Isomap)
- 使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
- 细说 HttpHandler 的映射过程
- 深入浅出spring boot 2.x 02-spring注解&jpa映射【笔记】
- 流程总结:Hibernate实体映射
- Hibernate JPA实体继承的映射(一) 概述
- NHibernate系列文章六:NHibernate数据类型映射
- 路由器端口映射
- SSH(struts+spring+hibernate)迅速开发--第三章 生成POJO对象和表映射(1)
- AutoMapper对集合的映射和转换
- Mybatis教程 | 第四篇:Mybatis的关联映射
- Hibernate继承映射之每个具体类一张表
- hibernate单表映射
- Hibernate关系映射之many-to-many