图像降维之MDS特征抽取方法

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

重磅干货,第一时间送达

前  言

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

章节目录

  • 准备知识

  • 算法推导

  • 算法步骤

  • 实验

  • 总结

01 准备知识

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

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

ed13ad8b5772af7e022a3a4e494db5c5.png

其中Q为正交矩阵,3e10f0198c67823f1eee1c391b8b0f86.png为实对角矩阵。

02 算法推导

给定m个样本dcf1d321b6470ddddd5eab7d2203f638.png的距离矩阵422e1645be688c9c479ab671d6280ef9.png,其中第i行第j列的元素b565a3fb6fb4ffff77ceec2482106a2a.png为样本541e3a8a95786e0505c58a5bb0f6b5d2.pnge79d1ed4a8bfa521e22a610a5e3b20cb.png的距离。目标是获得低维表示1023ba7763624e0e7c34a66d294f401b.png,其中bdc6f55832745a357ee7d671bc689222.png,且保持任意两个样本在317dcfdb1b36de82184738a0d2dfa8c7.png维空间的欧氏距离不变。

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

1eea5884267b1e9d95162b5dcc068563.png

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

0ed05431209dd54a468712bad9783caf.png

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

3154bd26ec04c2be4f531bc9f7768a6b.png

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

6a04bedd719029abb902ad88cedcb079.png

同理,

59811f7da2db510dc9a6a07e810b3fd7.png

a5986ccdb3f9f3c7710545ca4a5b0cf6.png

其中7f40ce7f9397be9c505e66a4a7e42113.png表示矩阵的迹(trace)。

由(4)(5)(6)式得,0e620f42b12373ddc41f2482a52d8ae0.pngfbbc6e6674feaf5df373350e670d37ae.png563aa5658963f12ff90da925ffd5e51d.png

为了表述清晰,令

015af9a5c07048328e5120178b1d31a3.png

b46159264cd0ecf97ceffa3d10583332.png

75ee600f77e6755dc29a081a71e6f375.png

联合(3)和(4)89bc4269a69d7dc64943c6dde5b86bc2.png(9)式,得(10)式:

428d0bf957f475d1f0e8183860997256.png

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

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

ae7c14ebe493b8acb71f8beda785a38b.png

f3b05a24b194d16096c9e690a564eb80.png

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

6daaeaca31a7afe70fea41457332c524.png

03 算法步骤

输入:距离矩阵a5d55dd0d8de87e1279c8c2ed2c750d0.png,其元素ca288c41be56f1aba0a249a0553b5a85.png为样本97b51e60740fe213cef275dd7d106c70.png22ba869100b2b83622782fff1a4d9813.png的距离;低维空间维数4d7e71dadefa653ea87de7616625b6ee.png

过程

1: 根据(7)f912084310ec8ee8218f200dd56cfbf3.png(9)式计算46a34bc1e54184d3472e22506fc01e79.png08d138a99d956e73f3442f79bca48814.png5b68eebfe6ce0776657f747302ac7ce7.png

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

3: 对B做特征值分解;

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

输出d755f6dc4697b556eb498b61403489e1.png

04 实验

实验代码

"""
MDS : Multi-dimensional Scaling
Refercences :
[1]周志华.机器学习[M].清华大学出版社,2016:425.
[2]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.MDS.html

Author : Ggmatch
Date : 2019/4/7
"""
from time import time

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter

from sklearn import manifold, datasets

# 制造样本
n_points = 1000
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10

fig = 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 = 2

t0 = 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()

实验效果

2064280095131c6dfe04d3ffbb39cb06.png

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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

410675336f2519a6a41554263b078442.png

37db70fae6a6d2f9888f35a8605f62a8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值