什么是聚类分析

聚类是一个将数据集划分为若干组(class)或类(cluster)的过程,并使得同一个组内的数据对象具有较高的相似度,而不同组中的数据对象是不相似的。

聚类与分类的区别:
聚类是一 种无监督的学习方法。与分类不同,它不依赖于事先确定的数据类别和标有数据类别的学习训练样本集合。
聚类是观察式学习,而不是示例式学习。

聚类分析的典型应用
在商务上,聚类能帮助市场分析人员从客户基本库中发现不同的客户群,并且用购买模式来刻画不同的客户群的特征。在生物学上,聚类能用于推导植物和动物的分类,对基因进行分类,获得对种群中固有结构的认识。聚类在地球观测数据库中相似地区的确定,汽车保险单持有者的分组,及根据房子的类型、价值和地理位置对一个城市中房屋的分组上也可以发挥作用。聚类也能用于对Web上的文档进行分类,以发现信息。

什么是好的聚类

一个好的聚类方法将产生以下的高聚类:

  • 最大化类内的相似性
  • 最小化类间的相似性

聚类结果的质量依靠所使用度量的相似性和它的执行。
聚类方法的质量也可以用它发现一些或所有隐含模式的能力来度量。

聚类分析中的数据类型

基本的数据结构

  1. 数据矩阵
    数据矩阵是一个对象—属性结构,由n个对象组成,如:人;每个对象利用p个属性加以描述,如:年龄、身高、体重等。数据矩阵采用关系表形式或n*p矩阵来表示:
  2. 相异度矩阵
    相异度矩阵(又称差异矩阵)是一个对象—对象结构,存放n个对象两两之间的近似性(差异性),采用n*n的矩阵形式表示:

    其中,d(i,j)表示对象i和对象j之间的差异(或不相似程度)。通常d(i,j)为一个非负数;当对象i和对象j非常相似或彼此“接近”时,该数值接近0;该数值越大,就表示对象i和对象j越不相似,由于有d(i,j)=d(j,i)且d(i,i)=0。所以,矩阵呈现出上三角或下三角的形式。

注意:

  1. 数据矩阵通常称为双模(two-mode)矩阵:行和列分布表示不同的实体;
  2. 相异度矩阵常被称为单模(one-mode)矩阵:行和列表示同一实体。
  3. 许多聚类算法都是以相异度矩阵为基础计算的,所以如果数据是以数据矩阵的形式给出的,则需要首先转换为相异度矩阵,才可以利用聚类算法来处理。

区间标度变量

区间标度变量(又称间隔数值变量)为基本呈直线比例的连续变量,如:重量、高度和温度等。

  • 为什么要标准化?

通常,选用的度量单位将直接影响聚类分析的结果,如:将高度的度量单位由“米”变为“英尺”,或将重量的单位由“千克”变为“英镑”,可能会产生非常不同的聚类结构。一般来说,度量单位越小,变量可能的值域越大,对聚类结果的影响也越大。因此,为避免对度量单位选择的依赖,数据应当标准化。

  • 度量值的标准化

为了实现标准化,一种方法是将初始测量值转换为无单位变量。给定一个属性变量f,可用如下公式对其进行标准化:

  1. 计算平均的绝对偏差
  2. 计算标准化测量(z-score)

    在标准化之后,或在无需标准化的特定应用中,由间隔数值所描述对象之间的差异(或相似)程度可以通过计算相应两个对象之间距离来确定,最常用的距离计算公式是欧氏距离(Euclidean distance),其具体公式如下:

R语言中求欧式距离
使用dist()函数

dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
#x是样本矩阵或者数据框。
method表示计算哪一种距离:
euclidean                欧几里德距离,即平方再开方。
maximum                  切比雪夫距离
manhattan                绝对值距离
canberra                 Lance 距离
minkowski                明科夫斯基距离,使用时要指定p值
binary                   定性变量距离.

例:
A的身高180cm,年龄25岁,有1万存款
B的身高166cm,年龄30,有5万存款
C的身高170cm,年龄45,有20万存款
计算A、B、C的距离

将每个人的数据表示成向量

> a<-c(180,25,1)
> b<-c(166,30,5)
> c<-c(170,45,20)

形成数据矩阵

> mydata<-rbind(a,b,c)

为避免对度量单位选择的依赖,将数据进行标准化

> mydatas<-scale(mydata)

求欧式距离

> mydist<-dist(mydatas,method="euclidean")

另一个常用的距离计算方法是曼哈顿距离(Manhattan distance),其计算公式如下:

Minkowski 距离是欧氏距离和曼哈顿距离的一个推广,它的计算公式如下:

二元变量

  • 什么是二元变量

一个二元变量只有两个状态:0或者1。其中0代表变量所表示的状态不存在;1则代表相应的状态存在。
如:给定变量smoker,用以描述一个病人是否吸烟的情况,如用smoker为1表示病人吸烟;若smoker为0表示病人不吸烟。

  • 二元变量的相异度计算

利用差异矩阵法。如果假设所有的二元变量有相同的权重,则可以得到一个两行两列(2*2)的条件表,如下:

其中:
q表示在对象i和对象j中均取1的二值变量个数;
r表示在对象i取1但对象j中取0的二值变量个数;
s表示在对象i中取0而在对象j中取1的二值变量个数;
t则表示在对象i和对象j中均取0的二值变量个数。
二值变量的总数为p,则:p=q+r+s+t。

R语言中二元变量的相异度计算
详见我的另一篇文章:R语言——assignment3

聚类算法

  • 系统聚类(层次聚类)
  • 基于划分的k-means聚类

系统聚类
系统聚类的基本思想是将距离相近的样品(或变量)先聚成类,距离相远的后聚成类,过程一直进行下去,每个样品(或变量)总能聚到合适的类中。

系统聚类过程是:假设总共有n个样品(或变量)
第一步:将每个样品(或变量)独自聚成一类,共有n类;
第二步:根据所确定的样品(或变量)“距离”公式,把距离较近的两个样品(或变量)聚合为一类,其它的样品(或变量)仍各自聚为一类,共聚成n-1类;
第三步:将“距离”最近的两个类进一步聚成一类,共聚成n-2类;……,以上步骤一直进行下去,最后将所有的样品(或变量)全聚成一类。

这时,有两个关键问题:

  • 类与类间的距离如何衡量?
  • 如何选择分几类呢?

类间距离
主要有最短距离法、最长距离法、类平均法、重心法。
它们的归类步骤基本上是一致的,主要差异是类间距离的计算方法不同。

  1. 最短距离法
    定义类与类之间的距离为两类中最近样品(指标)的距离,即为:
  2. 最长距离法
    定义类与类之间的距离为两类最远样品的距离,即为:
  3. 类平均法
    定义类与类之间的距离为两类中任意两样品的距离的平均。
  4. 重心法
    定义类间距离为两类中心(各类样品的均值)的距离。

聚类分析的步骤

R语言下系统(层次)聚类
使用系统聚类法对如下几个数进行聚类: 1,8,4,5,9,12
将这几个数定义为一组向量

> mydata<-c(1,8,4,5,9,12)

使用dist()函数计算变量间距离,形成相异度矩阵

> mydist<-dist(mydata,method="euclidean")

使用hclust()进行聚类

> mymodel<-hclust(mydist)

画出聚类模型图

> plot(mymodel,labels=mydata)

得到下图

指定聚为三类,并显示结果

> result<-cutree(mymodel,3)
> mydata[which(result==3)]
[1] 12

K-平均(k-means)聚类算法
K-平均(k-means)算法以k为参数,把n个对象分为k个簇,以使簇内对象具有较高的相似度,而簇间的相似度较低。
相似度的计算根据一个簇中对象的平均值(被看作簇的重心)来进行。

k-means算法的基本思想:
首先,随机的选择k个对象,每个对象初始的代表了一个簇的平均值;
对剩余的每个对象,根据其与各个簇中心的距离,将它赋给最近的簇;
然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。

通常选择均方差作为收敛准则函数:

k-means算法的特点:
只适用于聚类均值有意义的场合,在某些应用中,如:数据集中包含符号属性时,直接应用k-means算法就有问题;
用户必须事先指定k的个数;
对噪声和孤立点数据敏感,少量的该类数据能够对聚类均值起到很大的影响。

R语言学习(五)——聚类分析相关推荐

  1. R语言学习笔记(1~3)

    R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...

  2. R语言学习二——工具的使用

    R语言学习(二) 本章学习R语言相关开发工具的使用: 软件下载 软件安装 RStudio的使用 R扩展包的安装与载入 容易遇到的问题 一.软件下载(RStudio) Rstudio下载地址 选择免费版 ...

  3. 当当网 R 语言学习资料统计分析

    当当网 R 语言学习资料统计分析 一.网络数据的抓取 二.数据清洗与保存 (一)工作目录的修改 (二)导入数据并修改列名 1. 交互式编辑器 2. names()函数 3. rename()函数 (三 ...

  4. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

  5. R语言学习之数据分析实战(一)

    R语言学习之数据分析实战(一) 一.线性回归 回归(regression):通常指那些用一个或多个预测变量,也称自变量或解释变量,来预测响应变量,也称为因变量.效标变量或结果变量的方法. 普通最小二乘 ...

  6. R语言学习系列之本地数据获取

    R语言学习系列之本地数据获取 任何数据分析工作之前,都得把数据先读取进来你才能进行后续的分析工作.所以本文简要介绍在R中如何对本地文件进行获取,希望可以给刚刚接触R语言的同学一点启发. 一.控制台的输 ...

  7. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  8. R语言学习系列之向量化计算

    ##R语言学习系列之向量化计算 本文主要讲解R语言向量化计算的原理及方法,希望对初学者能够提供帮助. ##一.向量化 什么是向量化计算呢?其实你可以简单的理解成这样:当我们在使用函数或者定义函数的时候 ...

  9. R语言学习-第二天-R的绘图

    R语言学习-第二天-用R绘图 R语言绘图 1.绘图函数 1.直方图 2.散点图 3.柱状图.饼图 4.箱线图 5.星相图 6.茎叶图.Q-Q图 7.热力图 8.向日葵散点图 9.散点图集 10.三维作 ...

  10. 【R语言】沈阳地铁数据处理及站间流量统计——R语言第五次实训

    title: "R语言第五次实训" output: html_notebook 题目一: 1读数据 df <-read.csv("D:\\张志浩\\大数据班\\R语 ...

最新文章

  1. Linux系统的快照是什么,linux – 文件系统快照与简单复制文件有何不同?
  2. spring核心框架体系结构(jar包依赖)
  3. 以太网数据包、IP包、TCP/UDP 包的结构(转)
  4. mysql 创建唯一索引_Mysql创建索引
  5. Numpy之Broadcasting
  6. Docker存储卷基本操作
  7. 趣学 C 语言(七)—— 文件读写操作
  8. MAC刻录iso到USB、U盘
  9. 重新定义QLabel的clicked事件
  10. 大家都是怎么写论文的
  11. c语言vt码的用法,你可以使用vt100转义码c ++的十六进制颜色值
  12. 【Ubantu】root密码设置
  13. 关于Hibernate中调用集合类时出现的 the owning Session was closed 错误解决方案
  14. golang string转int8_Go教程:23 string转换int类型方法对比
  15. 105个软件测试工具大放送
  16. java 如何防止恶意注册表,如何防止恶意网页篡改注册表
  17. 计算机远程桌面软件,手把手教你远程控制电脑软件推荐
  18. 24段魔尺,可以折出哪些精美图案
  19. C# .NET实现手机接收短信
  20. 教你如何快速突破TikTok限流--TK领航社tiktok苹果版安卓版下载教程

热门文章

  1. 连锁零售多门店收银系统源码
  2. Clover 驱动文件夹_Intel全系利核显驱动教程
  3. pyq5 QTreeView 树形目录结构
  4. 云南等保2.0介绍,等保合规二级、三级整改所需设备清单和具体解决方案
  5. Flutter - 微信朋友圈效果实现
  6. TL9000 电信业质量体系管理标准
  7. 计算机为什么不能新建文档,电脑无法新建word文档怎么办
  8. 数学软件的matlab用处,引导高职学生用MATLAB软件解决数学的意义和价值
  9. python查看文件大小_python查看文件大小和文件夹内容的方法
  10. 金牛判势 精品起涨预警 主升浪起爆点指标 通达信绝对精准买点指标选股公式