机器人之人工智障学习笔记——机器学习(14)mds&isomap降维
小标 2018-10-17 来源 : 阅读 1800 评论 0

摘要:本文主要向大家介绍了机器人之人工智障学习笔记——机器学习(14)mds&isomap降维,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

本文主要向大家介绍了机器人之人工智障学习笔记——机器学习(14)mds&isomap降维,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。



一.概念

MDS(多维缩放)降维是一组对象之间的距离的可视化表示,也可以当做一种无监督降维算法使用。而Isomap(等度量映射)是在MDS算法的基础上衍生出的一种非迭代的全局优化算法,它是一种等距映射算法,也就是说降维后的点,两两之间距离不变,这个距离是测地距离。


二.算法

MDS算法的思想其实是巧妙的,即通过利用对点(数据)做平移,旋转,翻转等操作,点的距离是不变的这一特性来对原始数据进行操作。

算法步骤:
1.依据公式计算di,.^2,dj,.^2,d.,.^2
2.依据公式计算降维后空间的内积矩阵B
3.对矩阵B进行特征值分解
4.依据求得的对角矩阵和特征向量矩阵,依据公式计算Z

再说isomap,MDS算法是保持降维后的样本间距离不变,Isomap算法引进了邻域图,样本只与其相邻的样本连接,他们之间的距离可直接计算,较远的点可通过最小路径算出距离,在此基础上进行降维保距。

算法步骤:
1.对每个样本点x,计算它的k近邻;同时将x与它的k近邻的距离设置为欧氏距离,与其他点的距离设置为无穷大
2.调用最短路径算法计算任意两个样本点之间的距离,获得距离矩阵D
3.调用多维缩放MDS算法,获得样本集在低维空间中的矩阵Z


三.sklearn提供的API

sklearn的manifold提供了MDS方法以及Isomap方法

MD5:


def __init__(self, n_components=2, metric=True, n_init=4,                 max_iter=300, verbose=0, eps=1e-3, n_jobs=1,                 random_state=None, dissimilarity="euclidean"):self.n_components = n_componentsself.dissimilarity = dissimilarityself.metric = metricself.n_init = n_initself.max_iter = max_iterself.eps = epsself.verbose = verboseself.n_jobs = n_jobsself.random_state = random_state


Isomap:



def __init__(self, n_neighbors=5, n_components=2, eigen_solver='auto',                 tol=0, max_iter=None, path_method='auto',                 neighbors_algorithm='auto', n_jobs=1):self.n_neighbors = n_neighborsself.n_components = n_componentsself.eigen_solver = eigen_solverself.tol = tolself.max_iter = max_iterself.path_method = path_methodself.neighbors_algorithm = neighbors_algorithmself.n_jobs = n_jobs



参数与LLE类似,Isomap一样可以引入n_neighbors近邻数参数


实例代码:

还是以LLE的瑞士卷为例:




import numpy as npimport operatorimport matplotlib.pyplot as pltfrom sklearn import datasets,decomposition,manifoldfrom itertools import cyclefrom mpl_toolkits.mplot3d import Axes3Ddef load_data():swiss_roll =datasets.make_swiss_roll(n_samples=1000)return swiss_roll[0],np.floor(swiss_roll[1])def isomap_components(*data):X,Y=datafor n in [3,2,1]:mds=manifold.MDS(n_components=n)mds.fit(X)isomap=manifold.Isomap(n_components=n)isomap.fit(X)print("n = %d 重建误差:"%n,isomap.reconstruction_error()," 距离误差:",mds.stress_)def isomap_neighbors(*data):X,Y=dataNeighbors=[1,3,5,10,25,50,100,Y.size-1]fig=plt.figure("isomap",figsize=(9, 9))for i in range(1):mds=manifold.MDS(n_components=2)X_r=mds.fit_transform(X)ax=fig.add_subplot(3,3,1)ax.scatter(X_r[:,0],X_r[:,1],marker='o',c=Y,alpha=0.5)ax.set_title("mds")plt.xticks(fontsize=10, color="darkorange")plt.yticks(fontsize=10, color="darkorange")for i,k in enumerate(Neighbors):isomap=manifold.Isomap(n_components=2,n_neighbors=k)X_r=isomap.fit_transform(X)ax=fig.add_subplot(3,3,i+2)ax.scatter(X_r[:,0],X_r[:,1],marker='o',c=Y,alpha=0.5)ax.set_title("k = %d"%k)plt.xticks(fontsize=10, color="darkorange")plt.yticks(fontsize=10, color="darkorange")plt.suptitle("isomap")plt.show()X,Y=load_data()fig = plt.figure('data')ax = Axes3D(fig)ax.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o',c=Y)isomap_components(X,Y)isomap_neighbors(X,Y)








四.总结

MDS和Isomap都是保留全局特征的非线性数据降维算法,且出发点都是基于距离保持。不同的是MDS是基于欧式距离,Isomap则是测地线距离。Isomap新样本难以将其映射到低维空间中,因此需要训练一个回归学习器来对新样本的低维空间进行预测。此外,建立近邻图时,要控制好距离的阈值,防止短路和断路。
Isomap&LLE:如果是简单规范的低维流型,两者降维效果均可以接受的情况下适合用LLE,因为在运算效率上,Isomap要逊色于LLE,毕竟LLE是局部特征,但对于流型较为复杂的情况,LLE的降维效果就不如Isomap了,因为Isomap从全局出发使得其能更好的处理低维流形复杂的数据。



本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved