MDS简介

MDS是一个统计技术集合,用于可视化地描述距离集合中的相似性和差异性.对于经典的MDS的处理过程包括:输入一个包含数据集中任意两个数据点之间距离的距离矩阵,返回一个坐标集合,这个集合可以近似反应每对数据点之间的距离.

之所以说是近似反应,是因为在二维空间中很可能不存在被一组距离分开的点集. 例如: 3个彼此之间距离都是1的点,是一个等边三角形的顶点.因此,不可能另外一个点到这个三角形的三个顶点的距离都是1.

MDS简单应用

构建距离矩阵

library('foreign')

library('ggplot2')

# 构建不用样本对p1-6的评价矩阵1 0 -1表示

set.seed(851982) # To make sure results are consistent

ex.matrix

row.names(ex.matrix)

colnames(ex.matrix)

数据如下

P1 P2 P3 P4 P5 P6

A 0 -1 0 -1 0 0

B -1 0 1 1 1 0

C 0 0 0 1 -1 1

D 1 0 1 -1 0 0

构建相似性矩阵

这里用A*t(A)表示不同样本间的相似性

ex.mult

ex.mult

数据如下

A B C D

A 2 -1 -1 1

B -1 4 0 -1

C -1 0 3 -1

D 1 -1 -1 3

计算欧氏距离

ex.dist

ex.dist

数据如下

A B C

B 6.244998

C 5.477226 5.000000

D 2.236068 6.782330 6.082763

MDS进行可视化

# Visualize clusters

ex.mds

plot(ex.mds, type = 'n')

text(ex.mds, c('A', 'B', 'C', 'D'))

结果:

A B C

B 6.244998

C 5.477226 5.000000

D 2.236068 6.782330 6.082763

书中投票分类例子

dataclean

收集数据文件名

library('foreign')

library('ggplot2')

data.dir

data.files

data.files

#[1] "sen101kh.dta" "sen102kh.dta"

#[3] "sen103kh.dta" "sen104kh.dta"

#[5] "sen105kh.dta" "sen106kh.dta"

#[7] "sen107kh.dta" "sen108kh_7.dta"

#[9] "sen109kh.dta" "sen110kh_2008.dta"

#[11] "sen111kh.dta"

foreign包读取dta数据

rollcall.data

function(f)

{

read.dta(file.path(data.dir, f), convert.factors = FALSE)

})

# Ninth code snippet

dim(rollcall.data[[1]])

#[1] 103 647

head(rollcall.data[[1]])

#cong id state dist lstate party eh1 eh2 name V1 V2 V3 ... V638

#1 101 99908 99 0 USA 200 0 0 BUSH 1 1 1 ... 1

#2 101 14659 41 0 ALABAMA 100 0 1 SHELBY, RIC 1 1 1 ... 6

#3 101 14705 41 0 ALABAMA 100 0 1 HEFLIN, HOW 1 1 1 ... 6

#4 101 12109 81 0 ALASKA 200 0 1 STEVENS, TH 1 1 1 ... 1

#5 101 14907 81 0 ALASKA 200 0 1 MURKOWSKI, 1 1 1 ... 6

#6 101 14502 61 0 ARIZONA 100 0 1 DECONCINI, 1 1 1 ... 6

按照document清洗数据

rollcall.simplified

{

no.pres

for(i in 10:ncol(no.pres))

{

no.pres[,i] 6, 0, no.pres[,i])

no.pres[,i] 0 & no.pres[,i] < 4, 1, no.pres[,i])

no.pres[,i] 1, -1, no.pres[,i])

}

return(as.matrix(no.pres[,10:ncol(no.pres)]))

}

rollcall.simple

计算mDS(important part)

# and calculate the Euclidan distance between each Senator.

rollcall.dist

构建MDS数据矩阵

congresses

for(i in 1:length(rollcall.mds))

{

names(rollcall.mds[[i]])

congress

congress.names

function(n) strsplit(n, "[, ]")[[1]][1])# [, ]正则表达式 有逗号或空格就拆分字符串

rollcall.mds[[i]]

name = congress.names,

party = as.factor(congress$party),

congress = congresses[i])

}

head(rollcall.mds[[1]])

mds图形化

base.110

scale_size(range = c(2,2), guide = 'none') +

scale_alpha(guide = 'none') +

theme_bw() + #bw背景

theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), panel.grid.major = element_blank()) +

ggtitle("Roll Call Vote MDS Clustering for 110th U.S. Senate") +

xlab("") +# 无横纵坐标名

ylab("") +

scale_shape(name = "Party", breaks = c("100", "200", "328"), #按照不同的Party画不同shape的points labels = c("Dem.", "Rep.", "Ind."), solid = FALSE) +# 标签

scale_color_manual(name = "Party", values = c("100" = "black", "200" = "dimgray", "328"="grey"), breaks = c("100", "200", "328"), labels = c("Dem.", "Rep.", "Ind."))

print(base.110 + geom_text(aes(color = party, alpha = 0.75, label = cong.110$name,#在x,y处画名字 size = 2)))

按不同届的国会记录画多图

# Fourteenth code snippet

# Create a single visualization of MDS for all Congresses on a grid

all.mds

all.plot

geom_point(aes(shape = party, alpha = 0.75, size = 2)) +

scale_size(range = c(2, 2), guide = 'none') +

scale_alpha(guide = 'none') +

theme_bw() +

theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), panel.grid.major = element_blank()) +

ggtitle("Roll Call Vote MDS Clustering for U.S. Senate (101st - 111th Congress)") +

xlab("") +

ylab("") +

scale_shape(name = "Party", breaks = c("100", "200", "328"), labels = c("Dem.", "Rep.", "Ind."), solid = FALSE) +

facet_wrap(~ congress)

print(all.plot)

mds聚类matlab,机器学习C9笔记:MDS聚类可视化相关推荐

  1. 机器学习读书笔记:聚类

    文章目录 聚类 性能度量 外部指标度量方法 内部指标度量方法 基本距离计算 无序属性距离计算 加权距离计算 典型聚类算法 K-均值算法 k-均值代码 学习向量量化(LVQ) 高斯混合聚类 最大似然估计 ...

  2. 《机器学习》笔记:聚类

    基本概念 无监督学习(unsupervised learning) 是利用无标记训练样本的学习来揭示数据的内部性质以及规律.其中聚类(clustering)是其中重要的一类. 聚类是将数据按照一定原则 ...

  3. python多维向量聚类_机器学习:Python实现聚类算法(三)之总结

    考虑到学习知识的顺序及效率问题,所以后续的几种聚类方法不再详细讲解原理,也不再写python实现的源代码,只介绍下算法的基本思路,使大家对每种算法有个直观的印象,从而可以更好的理解函数中参数的意义及作 ...

  4. c均值聚类matlab程序_机器学习笔记-9-聚类

    1 K-means算法 K-means是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. 它是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 选择K个随机的点,称 ...

  5. 机器学习入门笔记(七):聚类

    文章目录 一.聚类的基本概念 1.1 相似度或距离 1.2 类或簇 1.3 类与类之间的距离 二.层次聚类 2.1 基本概念 2.1 算法描述 2.3 例题 三.K均值聚类 3.1 模型 3.2 策略 ...

  6. 机器学习笔记(九)聚类

    9.聚类 有必要回顾下前文所涉及的机器学习主流分类,有监督学习中根据预测结果离散和连续属性分为分类和回归两大类,常见的算法有:线性模型.决策树.神经网络.支持向量机.贝叶斯分类器以及集成学习. 本文开 ...

  7. 人工智障学习笔记——机器学习(8)K均值聚类

    一.概念 K均值聚类(K-means)是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则.K-means算 ...

  8. 机器学习-学习笔记 聚类

    聚类 聚类任务 背景 在无监督学习(密度估计.异常检测等)中,训练样本的标记信息是未知的(即不人为指定),旨在发现数据之间的内在联系和规律,为进一步的数据分析提供基础. 此类学习任务中研究最多.应用最 ...

  9. 【机器学习入门】深入浅出聚类算法!如何对王者英雄聚类分析,探索英雄之间的秘密...

    Datawhale 作者:小一,Datawhale优秀学习者 寄语:首先,对聚类算法进行了介绍:然后,解释了EM算法E步.M步的原理:最后,对sklearn参数进行了详解,并对王者荣耀英雄利用EM算法 ...

最新文章

  1. 用AI打造科技公益新模式,腾讯发起公益创新挑战赛,聚焦三大社会问题
  2. eclipse启动maven项目报类找不到
  3. C# 学习笔记(8) 控件的跨线程访问
  4. 就是好骑!骑ofo小黄蜂和舒畅早晨say hi,跟闹心堵车say bye
  5. Javascript基础回顾 之(一) 类型
  6. 装配图中齿轮的画法_装配图的规定画法 和特殊画法
  7. 【转】WPF入门教程系列六——布局介绍与Canvas(一)
  8. 支付宝小程序封装请求
  9. 创建和使用约束Constraint
  10. CentOS 6.8下ELK+filebeat+redis 日志分析平台
  11. Bailian2965 玛雅历【日期计算】
  12. React 之 JSX
  13. postgresql开启历史查询记录日志
  14. 虚拟仿真实验室管理系统
  15. Excel的FIND函数及其用法
  16. 怎样在mac系统里将文件拷贝到移动硬盘教程
  17. Spring学习笔记4
  18. unity屏幕适配以及坐标点适配
  19. DICTATOR第一周排序部分作业
  20. Vert.x(vertx) 实现TCP服务

热门文章

  1. Python matplotlib label设置斜体字符
  2. 谨慎解决:找不到指定的模块(Exception from HRESULT:0X8007007E)
  3. 5.21 将表格恢复到排序前的状态 [原创Excel教程]
  4. LoadRunner的函数全集
  5. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?
  6. keep-alive用法
  7. 00x: Django models.Model详解
  8. django models 之字段详解
  9. Django models模块字段注释
  10. 平板电脑出现计算机错误,苹果平板电脑显示iPad已停用连接iTunes怎么办