Isomap
来源:互联网 发布:英国可以用淘宝吗 编辑:程序博客网 时间:2024/06/01 10:47
Isomap算法是在MDS算法的基础上衍生出的一种算法,MDS算法是保持降维后的样本间距离不变,Isomap算法引进了邻域图,样本只与其相邻的样本连接,他们之间的距离可直接计算,较远的点可通过最小路径算出距离,在此基础上进行降维保距。
计算流程如下:
- 设定邻域点个数,计算邻接距离矩阵,不在邻域之外的距离设为无穷大;
- 求每对点之间的最小路径,将邻接矩阵矩阵转为最小路径矩阵;
- 输入MDS算法,得出结果,即为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 ddef calculate_distance_matrix(x,y): d=metrics.pairwise_distances(x,y) return ddef 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()
结果显示:
原始数据:
降维结果:
1 0
- Isomap
- isomap 资料
- Isomap资料
- IsoMap实战
- isomap mds 实现
- 非线性降维算法Isomap与C-Isomap的研究
- 一种快速映射isomap算法
- 机器学习(MDS,ISOMAP)
- Isomap等距映射算法(1)
- 降维算法总结 MDS与ISOMAP
- ISOMAP(等规度映射方法)
- 流形学习——Isomap算法
- 流形学习 manifold learning--自学小结(2)之 Isomap
- 流形学习之等距特征映射(Isomap)
- 流形学习之等距特征映射(Isomap)
- 【机器学习算法】流形学习笔记一:Isomap
- 人工智障学习笔记——机器学习(14)mds&isomap降维
- 蓝桥杯☆难度题目(6,7题)
- 2017.04.09:Mysql编程
- 数据结构—栈应用(一)数制转换
- JavaScript中linux时间戳与日期的转换
- Edittext文字飞入飞出效果
- Isomap
- 自治扫雷,基本功能全部实现
- Log4j动态配置日志路径
- 蓝桥杯:递归类型题
- 计算机视觉、机器学习相关领域论文和源代码大集合
- <mvc:annotation-driven/>与静态资源配置引发的问题
- java Error:"The method xxx is undefind for the type of xxx"
- Part01
- Python中原始字符串操作符 r R