点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

前  言

MDS,中文名叫“多维缩放”,是一种经典的降维方法,同时也是数据可视化的一种手段。最早起源于当我们仅能获得物体之间的相似性矩阵时,如何由此来重构它们的欧几里得坐标,如对一个国家的许多城市而言,假如我们不知道它们的经纬度信息,却知道所有城市两两之间的距离,就可以通过MDS方法重现它们的空间信息。MDS的基本思想很简单,要求原始空间中样本之间的距离在低维空间中得到保持。下面我们将对MDS的原理进行学习。

章节目录

  • 准备知识

  • 算法推导

  • 算法步骤

  • 实验

  • 总结

01 准备知识

实对称矩阵的特征分解性质

任意的对称矩阵都有N个线性无关的特征向量,并且可以正交单位化。实对称矩阵A可被分解成:

其中Q为正交矩阵,为实对角矩阵。

02 算法推导

给定m个样本的距离矩阵,其中第i行第j列的元素为样本的距离。目标是获得低维表示,其中,且保持任意两个样本在维空间的欧氏距离不变。

从已知的条件中,我们唯一能够得到降维后的样本与未降维前的样本之间的关系如下(1)式:

为了更清晰地观察的关系,将(1)式左边平方,得(2)式:

从(2)式可以看出,各自的模以及内积有关,为了能够统一表示这种关系,这里引入内积矩阵,其中,(2)式变换成(3)式:

显然,我们接下来的目标是得到B中任一元素的解析解。在不影响结果正确性的前提下,为了方便后续计算,令降维后的样本Z被中心化,即,可以得到,同理。则由(3)式可以得到式(4)(5)(6):

同理,

其中表示矩阵的迹(trace)。

由(4)(5)(6)式得,

为了表述清晰,令

联合(3)和(4)(9)式,得(10)式:

至此,已得到B和D的全部关系。接下来便是由B得到最终目标Z。

首先,我们可以判断出B是实对称矩阵,由实对称矩阵性质可知,,其中为特征值构成的对角矩阵,,V是特征向量矩阵。

一般降维任务总是取作为目标维度,所以取d'个最大特征值构成对角矩阵,对应的特征向量矩阵为,则

03 算法步骤

输入:距离矩阵,其元素为样本的距离;低维空间维数

过程

1: 根据(7)(9)式计算

2: 根据(10)式计算内积矩阵B;

3: 对B做特征值分解;

4: 取个最大特征值所构成的对角矩阵,为相应的特征向量矩阵。

输出

04 实验

实验代码

"""
MDS : Multi-dimensional Scaling
Refercences :
[1]周志华.机器学习[M].清华大学出版社,2016:425.
[2]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.MDS.htmlAuthor : Ggmatch
Date : 2019/4/7
"""
from time import timeimport matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatterfrom sklearn import manifold, datasets# 制造样本
n_points = 1000
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10fig = plt.figure(figsize=(5, 5))  #画板
gs = fig.add_gridspec(1,2)  #共2副子图
ax1 = fig.add_subplot(gs[0,0], projection='3d')  #第一幅子图表示原始样本分布
ax1.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)# MDS降维
n_components = 2t0 = time()  #计时开始
mds = manifold.MDS(n_components, max_iter=100, n_init=1)  #建立MDS模型
Y = mds.fit_transform(X)
t1 = time()  #计时结束
ax2 = fig.add_subplot(gs[0,1])
ax2.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)  #第2副子图表示降维后样本分布
ax2.set_title("MDS (%.2g sec)" % (t1 - t0))
ax2.xaxis.set_major_formatter(NullFormatter())
ax2.yaxis.set_major_formatter(NullFormatter())plt.show()

实验效果

05 总结

1)高维空间中对两个样本用欧式距离求直线距离,很多时候并不可取(如实验案例取得是流形空间),两点之间应该用“测地线”距离。改进算法为Isomap(Isomatric Mapping)。

2)MDS其实分为Metric MDS与Non-Metric MDS,本文讲述的是Metric MDS,通过样本之间的欧氏距离来近似代表相似度的思路,而Non-Metric MDS是通过点与点之间距离的单调映射来近似原有的距离。实际应用中,样本之间的距离越近,相似度越大,反之亦然。

References:

[1]https://baike.baidu.com/item/%E7%89%B9%E5%BE%81%E5%88%86%E8%A7%A3/12522621?fr=aladdin

[2]周志华.机器学习[M].清华大学出版社,2016:425.

[3]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.MDS.html

[4]Cox, T.F., Cox, M.A.A. (2001). Multidimensional Scaling. Chapman and Hall.

[5]http://blog.sina.com.cn/s/blog_501162be0102v37l.html

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

图像降维之MDS特征抽取方法相关推荐

  1. ECCV 2020 | PHOSA:一种基于单目图像的人-物重建方法

    项目.论文地址:在公众号「3D视觉工坊」,后台回复「PHOSA」,即可直接下载. 概述 作者提出了一种能够推断出人类和物体的形状和空间排列的方法,只需要一张在自然环境中捕捉的图像,且不需要任何带有3D ...

  2. svd降维 python案例_PCA降维的原理、方法、以及python实现。

    PCA(主成分分析法) 1. PCA(最大化方差定义或者最小化投影误差定义)是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了.那么PCA的核心思想是什么呢? 例如D ...

  3. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  4. pca图像压缩python_基于PCA的图像降维及图像重构

    1 PCA简述 PCA(Principal Component Analysis)主成分分析算法,在进行图像识别以及高维度数据降维处理中有很强的应用性,算法主要通过计算选择特征值较大的特征向量来对原始 ...

  5. 合成孔径雷达算法与实现_地基干涉合成孔径雷达图像非线性大气相位补偿方法...

    作为一种高精度的形变测量仪器,地基干涉合成孔径雷达(GB-InSAR)已经在形变监测领域得到了广泛的应用,其测量误差的主要来源是大气相位.由于不同时刻气象条件的不同,电磁波在大气中传播的速度会发生改变 ...

  6. python打开文件夹中的tiff_浅谈python下tiff图像的读取和保存方法

    对比测试 scipy.misc和 PIL.Image和 libtiff.TIFF三个库 输入: 1. (读取矩阵) 读入uint8.uint16.float32的lena.tif 2. (生成矩阵) ...

  7. 数组的降维与升维方法

    数组的降维与升维方法 数组的降维 数组的升维 数组的降维 <script>// 二维数组降维var arr = [[12, 78, 56],[78, 89],[2, 3]];var arr ...

  8. dncnn图像去噪_深立井井壁图像的卷积神经网络去噪方法

    深立井井壁图像的卷积神经网络去噪方法 贾晓芬 , 郭永存 , 柴华荣 , 赵佰亭 , 黄友锐 [摘 要] 摘要 : 为了实现井壁缺陷的自动检测 , 提出去除井壁图像噪声的卷积神 经网络 (CNN) 模 ...

  9. 肺结节目标检测_一种基于CT图像的肺结节检测方法及系统与流程

    本发明属于医学图像分析和计算机辅助诊断等技术领域,更具体地,涉及一种基于CT图像的肺结节检测方法及系统. 背景技术: 肺癌是导致患癌死亡的最危险的疾病之一,其发病率占所有癌症的三分之二,且5年存活率为 ...

最新文章

  1. 解决Chrome中UEditor插入图片的选择框加载过慢问题
  2. 杨元庆谈三年变化:IBM到底给联想带来什么?
  3. python开发环境配置以及其简单的运行方式
  4. pygame学习和python巩固——字体显示
  5. MYSQL 常用 DDL
  6. [Matlab] 变量名与字符串的互相转换的正确方法
  7. Android Studio搭建Tensorflow Lite项目和加载tflite模型文件
  8. XCODE 9:最新功能详尽介绍
  9. c4d在运行时候显示计算机内存不足,打开c4d电脑电脑卡死怎么办
  10. 在线版和离线版电路仿真以及开源电子硬件设计介绍
  11. tk.mybatis.mapper.MapperException: 无法获取 com.zhao.mapper.BIllTypeMapper.selectCountByExample 方法的泛型信息
  12. 从0开始学大数据-数据仓库建模
  13. vue 移入显示_vue鼠标移入显示点赞图标,移出隐藏点赞图标,现在我想点击点赞图标,鼠标移出不会隐藏图标,怎么做?...
  14. Oracle语法 50道sql语句练习
  15. 基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)
  16. 企业内部文档共享平台-MM-WiKi
  17. 解决猫眼自定义字体的问题-获取影院实时电影拍片或实时票房等
  18. 系统设计面试的万金油
  19. Python 进行气象预测
  20. 【论文阅读】社交网络传播最大化问题-03

热门文章

  1. 谈谈Python那些不为人知的冷知识(二)
  2. AI找Bug,一键快速预测
  3. 想去Google做AI?先看完这套面试指南(附面试题)
  4. 颜值绝绝子的swagger-ui
  5. 深入Hotspot源码,搞清楚JVM的本质
  6. 支付宝二面:Mybatis接口Mapper内的方法为啥不能重载吗?我直接懵逼了...
  7. 支付宝的架构到底有多牛逼!还没看完我就跪了!
  8. 剑指offer_第10题_矩形覆盖
  9. 【廖雪峰python进阶笔记】类的继承
  10. 阿里技术专家推荐的几个公众号!