流形学习(Manifold Learning)是机器学习中一大类算法的统称,流形学习是非线性的降维方法(an approach to non-linear dimensionality reduction)。PCA、LDA等降维方法基于线性假设,经常会损失数据内部非线性的结构信息;流形学习是线性降维方法的generalization,目的是捕获数据内部非线性的结构。而MDS就是流行学习中非常经典的一种方法。

多维尺度变换是一种在低维空间展示“距离”数据结构的多元数据分析技术,是一种将多维空间的研究对象简化到低维空间进行定位、分析和归类,同时又保留对象间原始关系的数据分析方法。多维尺度变换算法集中于保留高维空间中的“相似度”信息,而在一般的问题解决的过程中,这个“相似度”通常用欧式距离来定义。

通俗来讲,就是将多维数据映射到低维空间,同时保持各个样本之间的原有相对距离不变。

多维尺度变换的目标:当n 个对象中各对对象之间的相似性(或距离)给定时,确定这些对象在低维(欧式) 空间中的表示(称为感知图, Perceptual Mapping),
并使其尽可能与原先的相似性(或距离)“大体匹配”,使得由降维所引起的任何变形达到最小。

多维尺度变换可以应用到数据可视化,通过可视化找出异常点,反欺诈应用等。

计算步骤大致如下:

第一步:计算所有数据项两两间的实际距离(可参考皮尔逊算法或欧几里德算法)

第二步:将数据项随机放置在二维图上。

第三步:针对每两两构成的一对数据项,将它们的实际距离与当前在二维图上的距离进行比较,求出一个误差值

第四步:根据误差的情况,按照比例将每个数据项的所在位置移近或移远少许量。(每一个节点的移动,都是所有其它节点施加在该节点上的推或拉的结合效应。)

第五步:重复第三步、第四步(节点每移动一次,其当前距离与实际距离的差距就会减少一些)。这一过程会不断地重复多次,直到无法再通过移动节点来减少总体误差为止。

python 实现

已知四个城市之间的距离,如何展示出他们的相对位置,原理就是利用MDS将多维数据映射到二维空间,作为经纬度坐标,同时之间的相对距离保持不变。

import numpy as np
import pandas as pd
from sklearn.manifold import MDS
import matplotlib.pyplot as plt
#%%
data = np.array([(0,1046,608,1859),
(1046,0,825,1149),
(608,825,0,1280),
(1859,1149,1280,0)
]
)
index = ['beijing','shanghai','zhengzhou','guangzhou']
columns = ['beijing','shanghai','zhengzhou','guangzhou']
Word = pd.DataFrame(data,index,columns)
Word
#%%
mds = MDS()
mds.fit(data)
#%%
a = mds.embedding_
print(a)
plt.scatter(a[0:,0],a[0:,1],color='red')

多维尺度变换MDS(Multidimensional Scaling)的更多相关文章

  1. SPSS数据分析—多维尺度分析

    在市场研究中,有一种分析是研究消费者态度或偏好,收集的数据是某些对象的评分数据,这些评分数据可以看做是对象间相似性或差异性的表现,也就是一种距离,距离近的差异性小,距离远的差异性大.而我们的分析目的也 ...

  2. 二维DCT变换

    DCT(Discrete Consine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩.经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是 ...

  3. SPSS数据分析—基于最优尺度变换的典型相关分析

    传统的典型相关分析只能考虑变量之间的线性相关情况,且必须为连续变量,而我们依然可以使用最优尺度变换来拓展其应用范围,使其可以分析非线性相关.数据为分类数据等情况,并且不再仅限于两个变量间的分析, 虽然 ...

  4. 吴裕雄 python 机器学习——多维缩放降维MDS模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  5. 二维DCT变换 | Python实现

    引言 最近专业课在学信息隐藏与数字水印,上到了变换域隐藏技术,提到了其中的DCT变换,遂布置了一个巨烦人的作业,让手动给两个\(8\times8\)的矩阵做二维DCT变换,在苦逼的算了一小时后,我决定 ...

  6. Bitmap尺度变换

    Bitmap bitMap = BitmapFactory.decodeFile(path); int width = bitMap.getWidth(); int height = bitMap.g ...

  7. 宏基因组扩增子图表解读2散点图:组间整体差异分析(Beta多样性)

    散点图 数据点在直角坐标系平面上的分布图.在宏基因组领域,散点图常用于展示样品组间的Beta多样性,常用的分析方法有主成分分析(PCA),主坐标轴分析(PCoA/MDS)和限制条件的主坐标轴分析(CP ...

  8. R语言︱常用统计方法包+机器学习包(名称、简介)

    一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考基本的R包已经实现了传统多元统计的很多功能 ...

  9. ML—R常用多元统计分析包(持续更新中……)

    基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面要综述的包主要分为以下几个部分: 1) 多元数据可视化(Visualising multivaria ...

随机推荐

  1. egret 开发总结

    用egret快两年了,开发过两款成功的游戏.<<妖怪修走 |诸神的黄昏>><<损友圈|我的地盘>> 妖怪修走是个重度游戏,付费率超高.也比较成功. 损友 ...

  2. Oracle判断字段中是否包含中文(若有,取出该中文的方法)

    一.问题说明 在处理数据的时候,需要判断某个字段字符串中是否有中文,若有则取出中文. 二.解决办法 首先如何判断某个字段字符串中是否有中文.这里介绍三种方法: 1.采用ASCIISTR函数 说明:AS ...

  3. default.properties文件

    在地址栏访问某个 action 之所以能访问到,只因为在 default.properties 配置文件中有一个键值对,key 为struts.action.extension,值为 action,, ...

  4. Delphi ADOQuery多个参数重复 改编技巧

    今天看了多年前的一个帖子,发现回答不合理,有些还将其归为delphi的bug.其实主要是没有灵活应用参数. ADOQUERY查询时,这样不行,结果不正确. WITH ADOQUERY1 DO BEGI ...

  5. 第136天:Web前端面试题总结(理论)

    Web前端面试题总结 HTML+CSS理论知识 1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服 ...

  6. Python基础数据类型题

    Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是pytho ...

  7. Unbuntu+nginx+mysql+php

    1/准备 sudo su --切换到root 2/nginx安装 apt-get update apt-get install nginx 3/mysql 安装 apt-get install mys ...

  8. BZOJ3747 POI2015Kinoman(线段树)

    考虑固定左端点,求出该情况下能获得的最大值.于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了.每次移动左端点在线段树上更新即可. #include< ...

  9. 3294 [SCOI2016]背单词

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...

  10. 「美团 CodeM 资格赛」跳格子

    题目描述 nnn 个格子排成一列,一开始,你在第一个格子,目标为跳到第 n 个格子.在每个格子 i 里面你可以做出两个选择: 选择「a」:向前跳 ai​​ 步. 选择「b」:向前跳 bi 步. 把每步 ...