R与数据分析旧笔记(十三) 聚类初步

聚类

聚类

R与数据分析旧笔记(十三) 聚类初步

关键度量指标:距离

常用距离

  • 绝对值距离

    R与数据分析旧笔记(十三) 聚类初步

    绝对值距离也称为“棋盘距离”或“城市街区距离”。
  • 欧氏(Euclide)距离

    R与数据分析旧笔记(十三) 聚类初步
  • 闵可夫斯基(Minkowski)距离

    R与数据分析旧笔记(十三) 聚类初步

    不难看出绝对值距离和Euclide距离是Minkowski距离的特例

    当各变量的单位不同或测量值的范围相差很大时,不应直接采用Minkowski距离,而应先对各变量的数据作标准化处理,然后再用标准化后的数据进行计算
  • 切比雪夫(Chebyshev)距离

    R与数据分析旧笔记(十三) 聚类初步

    它是Minkowski距离中R与数据分析旧笔记(十三) 聚类初步的情况
  • 马氏(Mahalanobis)距离

    R与数据分析旧笔记(十三) 聚类初步

    其中R与数据分析旧笔记(十三) 聚类初步为样本方差矩阵

    用Mahalanobis距离的好处是考虑到各变量之间的相关性,并且与变量的单位无关,但Mahalanobis距离有一个很大的缺陷,就是Mahalanobis距离公式中的R与数据分析旧笔记(十三) 聚类初步难以确定
  • Lance和Williams距离

    R与数据分析旧笔记(十三) 聚类初步

    其中R与数据分析旧笔记(十三) 聚类初步

disst()函数

> x1=c(1,2,3,4,5)
> x2=c(3,2,1,4,6)
> x3=c(5,3,5,6,2)
> x=data.frame(x1,x2,x3)
> dist(x,method="euclidean")
1 2 3 4
2 2.449490
3 2.828427 2.449490
4 3.316625 4.123106 3.316625
5 5.830952 5.099020 6.164414 4.582576
> dist(x,method="minkowski")
1 2 3 4
2 2.449490
3 2.828427 2.449490
4 3.316625 4.123106 3.316625
5 5.830952 5.099020 6.164414 4.582576
> dist(x,method="minkowski",p=5)
1 2 3 4
2 2.024397
3 2.297397 2.024397
4 3.004922 3.143603 3.004922
5 4.323101 4.174686 5.085057 4.025455
  • “euclidean”——Euclide距离
  • “maximum”——Chebyshev距离
  • “manhattan”——绝对值距离
  • “canberra”——Lance距离
  • “minkowski”——Minkowski距离,其中p是Minkowski距离的阶数
  • “binary”——定性变量距离

数据中心化与标准化变换

  • 目的:使到各个变量平等地发挥作用
  • scale()函数
  • 极差化,sweep()函数
> x
x1 x2 x3
1 1 3 5
2 2 2 3
3 3 1 5
4 4 4 6
5 5 6 2
> scale(x,center=T,scale=T)
x1 x2 x3
[1,] -1.2649111 -0.1039750 0.4868645
[2,] -0.6324555 -0.6238503 -0.7302967
[3,] 0.0000000 -1.1437255 0.4868645
[4,] 0.6324555 0.4159002 1.0954451
[5,] 1.2649111 1.4556507 -1.3388774
attr(,"scaled:center")
x1 x2 x3
3.0 3.2 4.2
attr(,"scaled:scale")
x1 x2 x3
1.581139 1.923538 1.643168

(凝聚的)层次聚类法

  • 思想
    1. 开始时,各个样本各自为一类
    2. 规定某种度量作为样本之间的距离及类与类之间的距离,并计算之
    3. 将距离最短的两个类合并为一个新类
    4. 重复2-3,即不断合并最近的两个类,每次减少一个类,直至所有样本被合并为一类

hclust()函数

  • 例子
> x<-c(1,2,6,8,11);dim(x)<-c(5,1);
> x
[,1]
[1,] 1
[2,] 2
[3,] 6
[4,] 8
[5,] 11
> d<-dist(x)
> d
1 2 3 4
2 1
3 5 4
4 7 6 2
5 10 9 5 3
hc1<-hclust(d,"single");hc2<-hclust(d,"complete")
> hc3<-hclust(d,"median");hc4<-hclust(d,"mcquitty")
> opar<-par(mfrow=c(2,2))
> plot(hc1,hang=-1);plot(hc2,hang=-1)
> plot(hc3,hang=-1);plot(hc4,hang=-1)
> par(opar)

R与数据分析旧笔记(十三) 聚类初步

  • “single”——最短距离法
  • “complete”——最长距离法
  • “median”——中间距离法
  • “mcquitty”——Mcquitty相似法
  • “averrage”——类平均法
  • “centroid”——重心法
  • “ward”——离差平方和法

类个数的确定

在聚类过程中类的个数如何确定才是适宜的呢?这是一个十分困难的问题,至今仍未找到令人满意的 方法,但这又是一个不可回避的问题。目前基本的方法有三种:

  1. 给定一个阈值,通过观察谱系图,给出一个你认为的阈值T,要求类与类之间的距离要大于T
  2. 观测样本的散点图,对于二维或三维变量的样本,可以通过观测数据的散点图来确定类的个数
  3. 使用统计量,通过一些统计量来确定类的个数
  4. 根据谱系图确定分类个数的推测

Bemirmen(1972)提出了一个根据研究目的来确定适当的分类方法,并提出一些根据谱系图来分析的准则:

准则A 各类重心的距离必须很大

准则B确定的类中,各类所包含的元素都不要太多

准则C类的个数必须符合实用目的

准则D 若采用几种不同的聚类方法处理,则在各自的聚类图中应发现相同的类

在R语言中,有个叫rect.hclust()的函数,可以用来确定类的个数。

rect.hclust(tree,kk=NULL,which=NULL,x=NULL,h=NULL,border=2,cluster=NULL)

> plot(hc1,hang=-1)
> rect.hclust(hc1,k=2)

R与数据分析旧笔记(十三) 聚类初步

上一篇:mysql_online_schema_change工具大集合


下一篇:topshelf 开发windows 服务资料