聚类分析

聚类分析(Cluster analysis),也称为聚类(Clustering),目的是将一个对象(object) 集分成若干组,使得在相同组(也称为类(Clusters))的象相比于不同组中的对象更相似。聚类分析被广泛地应用于数据挖掘中,特别是初步的探索性数据分析。例如,图1 中的左图是二维散点图,根据相似度聚成三类,右图用红绿蓝三种颜色表示聚类结果。

图 1 二维散点聚类图

聚类技术在图像分析、信息检索、生物信息、数据压缩和计算机图形学等领域被广泛地应用。下面以图形例举聚类的常见应用:

图 2 图像分割

图 3 人类人口结构

图 4 图像压缩

定义

一般地,将一个“类” 定义为一个数据对象集。而对于不同的类型,“类” 的概念有所不同,因此,重要的是对不同类模型的理解。常见的类模型有以下几种:

  • 连接模型 : 例如,基于距离连接的层次聚类法(hierarchical clustering);

  • 中心模型 : 例如,k-means法使用一个类均值代表一个类;

  • 分布模型 : 例如,用概率分布代表一个类,典型的方法有基于EM算法的多元正态分布。
    “聚类”实际上是给出一个类的集合,通常包括数据集的所有对象。同时,它可能也指出了类之间的 关系。例如,层次聚类法给出了类之间的层次结构。按照类结构特点,聚类也可以大致分为两种类型:

    • Hard clustering : 每一个对象确定地属于某一个类

    • Soft clustering : 每一个对象在某种程度上属于某个类,这里的“某种程度”,通常用概率表示。下面介绍三种常见的聚类算法。

    层次聚类

层次聚类法,构建一个类的层次结构,产生一个从根到叶的树形结构,称为系统树图(dendrogram)。层次聚类的策略通常分为两种,即:

  • Agglomerative : 自下而上聚类

每一个对象初始时自成一类,然后递归地合并两个具有最短类间距的类成一个新类,从下往上生成类层次。

  • Divisive : 自上而下聚类

所有对象初始时组成一个类,然后递归地将上层类按最大类间距分解成两个新类,从上往下生成类层次。最后,用户可以根据类层次结构自定义分类结果。图5是依两种策略的聚类过程示意图:

图 5 层次聚类示意图

k-means聚类

定义

假设由 nn 个观测点组成的集合 (x1,x2,…,xn)(x_1, x_2, \dots, x_n),不妨设每个观测点是一个 dd 维实向量。k-means聚类的目标是,将这 nn 个观测分割进 KK 个集 S={S1,S2,…,SK}S = \{S_1, S_2, \dots, S_K\},使得类内平方和 WCSSWCSS 最小。这里,我们定义类内平方和为类中的点与该类中心的距离和,即

WCSS=∑k=1K∑x∈Sk||x−μk||2

WCSS = \sum\limits_{k=1}^K \sum\limits_{x\in S_k} ||x-\mu_k||^2
其中, μk,k=1,2,…,K\mu_k,\,k=1,2,\dots,K 是各类的中心,其值为该类中的观测点的均值。那么, k-means聚类的目标是找到一个分割 SS,使得

argminS∑k=1K∑x∈Sk||x−μk||2

\mathop{\arg\min}_{S} \sum\limits_{k=1}^K \sum\limits_{x\in S_k} ||x-\mu_k||^2

算法实现

k-means聚类算法由以下三步组成:

  • Initial step : 从数据集随机地选择 KK 个观测,分别作为 KK 个类的中心,其值记为 μ1,μ2,…,μK\mu_1, \mu_2, \dots, \mu_K。依次将 nn 个观测分配到距离它们最近的类中。KK 个类中心自然在它们各自代表的类中。设 γik∈{0,1}\gamma_{ik}\in \{0, 1\} 表示观测 xix_i 分配到类的情况,i=1,2,…,n;k=1,2,…,Ki=1,2,\dots,n;\,k=1,2,\dots,K. 显然,∑k=1Kγik=1,i=1,2,…,n\sum\limits_{k=1}^K \gamma_{ik} = 1,\,i=1,2,\dots,n. 那么,准则函数 WCSSWCSS 可以等价地写成

    WCSS=∑i=1n∑k=1Kγik||x−μk||2

    WCSS = \sum\limits_{i=1}^n \sum\limits_{k=1}^K \gamma_{ik} ||x-\mu_k||^2
    该算法接下来交替地在下面两步进行,直到函数 WCSSWCSS 收敛为止。

  • Assignment step : 固定μk,k=1,…,K\mu_k,\,k=1,\dots,K,分配每一个观测到距离它最近的类中心代表的类中,这样,得到 γik,i=1,…,n;k=1,…,K\gamma_{ik}, i=1,\dots,n; k=1,\dots,K.

    γik=⎧⎩⎨10 if k=argminj||xi−μj||2 否则.

    \gamma_{ik} =\begin{cases} 1 & \mbox{ if $k = \mathop{\arg\min}_{j} ||x_i-\mu_j||^2$}\\ 0 & \mbox{ 否则}.\\ \end{cases}

  • Update step : 现在固定 γiks\gamma_{ik}s,优化 μks\mu_k s。显然,准则函数 WCSSWCSS 是关于 μks\mu_k s 的二次函数,这样,使得准则函数 WCSSWCSS 达到极小值的 μks\mu_k s,为该函数的梯度方向,即,关于 μks\mu_k s 求导,导数为 0 的方向。即

    2∑i=1nγik(xi−μk)=0

    2\sum\limits_{i=1}^n\gamma_{ik} (x_i - \mu_k) = 0
    由此,得 μk\mu_k 的解析形式:

    μk=∑i=1nγikxi∑i=1nγik,k=1,…,K

    \mu_k = \dfrac{\sum\limits_{i=1}^n \gamma_{ik} x_i}{\sum\limits_{i=1}^n \gamma_{ik}}, \,k=1,\dots,K
    其中,γiks\gamma_{ik}s 在Assignment step步中确定。交替进行以上两步,直到准则函数 WCSSWCSS 收敛。

图 7 K-means聚类示意图

Gaussian Mixture Model (GMM)

一个高斯混合模型(GMM),由 KK 个Gaussian分布组成,每个Gaussian分布称为一个成分(Component),这些成分线性组合在一起,构成了GMM的概率密度函数

p(x)=∑k=1KπkN(x|μk,Σk)

p(x) = \sum\limits_{k=1}^K \pi_k \mathcal{N}(x | \mu_k, \Sigma_k)
这里,πk(k=1,2,…,K)\pi_k\,(k=1,2,\dots,K) 为成分 kk 所占的比例,显然有∑k=1Kπk=1\sum\limits_{k=1}^K \pi_k = 1. 如果我们想从GMM总体中取一个样品,可以分两步进行:首先,从KK个成分中随机选择一个成分,每个成分被选中的概率即为πk\pi_k。选中成分后,从该成分产生一个服从该分布的样品。

GMM聚类

假设样本 x1,x2,…,xNx_1, x_2, \dots, x_N 来自一个GMM,该GMM有 KK 个成分,则每个成分对应一个类(Cluster)。现在,根据最大似然原理估计参数 {πk,μk,Σk}′s\{\pi_k, \mu_k, \Sigma_k\}'s。设 xix_i 相关的隐变量 zi=(zi1,zi2,…,ziK),i=1,2,…,Nz_i = (z_{i1}, z_{i2}, \dots, z_{iK}),\,i=1, 2, \dots, N, 其中 zij=1z_{i j} = 1,当 xix_i 属于类 kk,否则,zij=0,j=1,…,Kz_{i j} = 0,\,j=1,\dots,K。给定完全数据(x,z)={(xi,zi),i=1,2,…,N}(x, z) = \{(x_i, z_i),\,i=1, 2, \dots, N\},完全数据的对数似然函数

logp(x,z|π,μ,Σ)=∑i=1N∑k=1Kzik{logπk+logN(xi|μk,Σk}

\log p(x, z | \pi, \mu, \Sigma) = \sum\limits_{i=1}^N \sum\limits_{k=1}^K z_{i k} \{\log \pi_k + \log \mathcal{N}(x_i | \mu_k, \Sigma_k\}
下面利用 EM算法求对数似然的最大值,得到参数的 MLE’s

The Expectation-Maximization (EM) algorithm

  • E-step : γik≜E(zik)=πkN(xi|μk,Σk)∑j=1KπjN(xi|μj,Σj)\gamma_{i k} \triangleq E(z_{i k})=\dfrac{\pi_k \mathcal{N}(x_i | \mu_k, \Sigma_k)}{\sum\limits_{j=1}^K \pi_j \mathcal{N}(x_i | \mu_j, \Sigma_j)}

  • M-step : 最大化完全对数似然的期望,即

argmaxπ,μ,ΣE[logp(x,z|π,μ,Σ)]=∑i=1N∑k=1Kγik{logπk+logN(xi|μk,Σk}

\mathop{\arg\max}_{\pi, \mu, \Sigma} E[\log p(x, z | \pi, \mu, \Sigma)] = \sum\limits_{i=1}^N \sum\limits_{k=1}^K \gamma_{i k} \{\log \pi_k + \log \mathcal{N}(x_i | \mu_k, \Sigma_k\}
解得参数的 MLE分别为

πk=∑i=1NγikN,μk=∑i=1Nγikxi∑i=1Nγik,Σk=∑i=1Nγik(xi−μk)(xi−μk)′∑i=1Nγik

\pi_k = \dfrac{\sum\limits_{i=1}^N \gamma_{i k}}{N},\,\mu_k = \dfrac{\sum\limits_{i=1}^N \gamma_{i k} x_i}{\sum\limits_{i=1}^N \gamma_{i k}},\, \Sigma_k = \dfrac{\sum\limits_{i=1}^N \gamma_{i k} (x_i - \mu_k)(x_i - \mu_k)'}{\sum\limits_{i=1}^N \gamma_{i k}}

迭代E步、M步,直到对数似然函数收敛为止。

GMMk-means的关系

  • GMME步实际上是k-means Assignment步的灵活版本,
    即,用γik∈[0,1]\gamma_{i k} \in [0, 1]代替了γik∈{0,1}\gamma_{i k} \in \{0, 1\}

  • GMMM步估计了每一个类的先验概率、均值和协方差阵

  • 取所有的πk\pi_k相等,即,πk=1/k,Σk=δ2E\pi_k = 1/k, \Sigma_k = \delta^2 E.
    当δ2→0\delta^2 \rightarrow 0时,γik→{0,1}\gamma_{i k}\rightarrow \{0, 1\},此时,GMMk-means等价。

应用

美国州暴力犯罪率调查

R数据集USArrests包括了美国50个州在1973年暴力犯罪情况的调查结果。即,各州每10万人因被控人身攻击、谋杀、强奸而被捕的人数,同时也统计了州城市人口比例。该数据集在R中表示为50个观测,4个变量的数据框。

按类平均法计算类间距,可视化层次聚类图:

分别按最短距离法(single)、最长距离法(complete)、
计算类间距,可视化层次聚类图:

hc1 <- hclust(dist(USArrests), "single")
hc2 <- hclust(dist(USArrests), "complete")
opar <- par(mfrow = c(1, 2))
plot(hc1,hang=-1)
plot(hc2,hang=-1)

重心聚类法,即,按两类的重心距离定义任意两个类的距离,并且取欧氏距离的平方作为距离。同时,将以上的聚类树“砍”为10类,构建新树,并与最初的树作比较。

## Do the same with centroid clustering and *squared* Euclidean distance,
## cut the tree into ten clusters and reconstruct the upper part of the
## tree from the cluster centers.
hc <- hclust(dist(USArrests)^2, "cen")
memb <- cutree(hc, k = 10)
cent <- NULL
for(k in 1:10){cent <- rbind(cent, colMeans(USArrests[memb == k, , drop = FALSE]))
}
hc1 <- hclust(dist(cent)^2, method = "cen", members = table(memb))
opar <- par(mfrow = c(1, 2))
plot(hc,  labels = FALSE, hang = -1, main = "Original Tree")
plot(hc1, labels = FALSE, hang = -1, main = "Re-start from 10 clusters")
par(opar)

一个k-means聚类的例子

现在,我们来模拟一个二维正态分布的数据集,在该数据集上作k-means聚类。首先,我们模拟两个正态样本,一个来自 N2(0,0.32E2)N_2 (0, 0.3^2 E_2),另一个来自 N2(1,0.32E2)N_2 (1, 0.3^2 E_2)。不妨设两个样本容量都是50,实际上,这两个样本可以通过模拟一维正态样本,均值分别为0, 1,方差均为 0.320.3^2 实现。将两个正态样本按行合并成一个数据集,则数据集的每一行代表来自某个正态总体的样品,我们用k-means对该数据集聚类,显然 K=2K = 2.

# a 2-dimensional example
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")
cl <- kmeans(x, 2)
plot(x, col = cl$cluster)
points(cl$centers, col = 2:1, pch = 20, cex = 2)

房价混合模型

假设我们观察了 NN 个不同的房价,不同地段的不同类型的房子售价差别很大,但在同一地段同一类型的房子价格相对稳定。因此,一个合理的房价模型,应该是由 KK 个成分组成的混合模型。每个成分代表一个特定的房型 + 地段组合,假设成分分布是正态分布,其中,均值、方差未知。
由 NN 个房价数据,利用EM算法拟合房价混合模型。注意到,像价格、收入这样的正变量,倾向呈指数增长。因此,用对数正态分布(log-normal distribution)作为成分分布可能更合适。

手写识别

假设我们有一个 N×NN\times N 个像素的黑白图像,该图像来自 0∼90\sim 9 的手写数字的一次扫描结果,现在要识别每个像素位置上的数字。为此,我们考虑由10个成分组成的混合模型。其中,每一个成分由N2N^2个Bernoulli分布组成的向量。这是因为,任一成分,代表要识别的某个数字,该数字在N2N^2个像素位置都有可能出现。这样,我们用Bernoulli分布来刻画该数字在任意位置是否出现,如果出现,该像素位置即为这个数字。所以,总共需要N2N^2个Bernoulli分布,用一个向量来表示。我们可以用EM算法训练该混合模型,根据手写数字聚类图像。然后,取另外一次手写数字的扫描图像作为检验集,在任一像素位置上,计算每一个数字出现的概率。最后,将具有最大概率的数字作为预测数字。

详细内容,敬请关注我们的微信订阅号”统计学习与大数据”!

应用机器学习(一):聚类分析相关推荐

  1. matlab中k-means算法_机器学习 | KMeans聚类分析详解

    大量数据中具有"相似"特征的数据点或样本划分为一个类别.聚类分析提供了样本集在非监督模式下的类别划分.聚类的基本思想是"物以类聚.人以群分",将大量数据集中相似 ...

  2. 机器学习之聚类分析---K-means(一)

    初探k-means(Matlab) 俗话说:"物以类聚,人以群分",聚类分析的目的是:在数据中发现数据对象之间的关系,并将数据进行分组,使得组内的相似性尽可能大,组间的差别尽可能大 ...

  3. 机器学习实战-聚类分析KMEANS算法-25

    KMEANS算法-NBA球队实力聚类分析 from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot ...

  4. Python机器学习---2.聚类分析代码部分

    1. 手写⼀个简单的Kmeans算法 导入所需要的包 # 导入一些包 import numpy as np import pandas as pd import matplotlib as mpl i ...

  5. 【机器学习】聚类分析与主成分分析(附例题源码)

    往期文章 [机器学习]回归分析 [机器学习]Logistic回归 [机器学习]神经网络 [机器学习]支持向量机 文章目录 K-means算法 直观理解 优化目标 随机初始化 聚类中心个数(K)的选择 ...

  6. 机器学习 - K-means聚类分析

    一.K-means 聚类算法介绍 1.K-means聚类算法原理 (1)先抛出一个情景问题 航空公司怎么样对客户分群,区分高价值客户.无价值客户等,对不同的客户群体实施个性化的营销策略,实现利润最大化 ...

  7. 【聚类分析】机器学习中聚类分析的简单详细案例,小白也能做!

    文章目录 生成一些数据 1.导入sklearn的包和画图的包 2.生成数据 3.查看x 4.查看y 5.看一下点的分布 散点图 聚类 Kmeans进行分类 1.建立模型 2.训练模型 3.获取分类结果 ...

  8. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  10. 5 大常用机器学习模型类型总结

    本文介绍了 5 大常用机器学习模型类型:集合学习算法,解释型算法,聚类算法,降维算法,相似性算法,并简要介绍了每种类型中最广泛使用的算法模型.我们希望本文可以做到以下三点: 1.应用性. 涉及到应用问 ...

最新文章

  1. golang websocket conn.close关闭错误_Websockets 与在golang中的应用
  2. 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
  3. C学习杂记(七)extern声明可省略变量类型
  4. Leetcode每日一题:4.寻找两个有序数组的中位数
  5. Android开发笔记(二十三)文件对话框FileDialog
  6. lambda表达式java_Java Lambda表达式
  7. QuickTime Player 如何开启倍速播放?
  8. com.lowagie.text-2.1.7jar
  9. POSIX 与 CMSIS 标准
  10. dxp全称_Protel DXP 2004 分立元件库元件名称中英对照表
  11. ESP32-CAM视频流
  12. 万字长文保姆级教你制作自己的多功能QQ机器人
  13. 【Unity3D进阶4-4】Unity3D AR的开发
  14. 通用串行总线控制器出现叹号,外设无法使用
  15. PHP 利用json_decode解析json为null问题解决
  16. 软件看板之父David Anderson:使用看板方法进行项目管理
  17. out of office ,out of the office,OOO的区别和联系
  18. C++难都难在这些地方
  19. 【selenium自动化】04 xpath高级语法css高级语法
  20. 我不曾忘记的初心-军还好吗

热门文章

  1. phonegap安装中的问题
  2. FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(
  3. [转]Arrays.sort()你应该知道的事
  4. 伪静态页面在iis7.0中的配置
  5. 使用ADO.net将数据导出到Excel并提供下载
  6. MPLS LDP邻居建立
  7. java常问算法题_Java面试中经常问到的算法题
  8. C++RAII惯用法:C++资源管理的利器
  9. Security+ 学习笔记41 安全网络技术
  10. 定位CPU异常抖动---tomcat热部署的坑[转载]