简介: 聚类是建模的起点,在没有目标的前提下,对研究对象按照距离分为不用的组。组内的距离尽可能小,组间距离尽可能大;最常用的两种聚类方法是系统聚类和k-means; 系统聚类是基于距离的聚类,计算量相对较大;相比之下k-means因计算量小,占内存小,方法简单而应用范围更广,尤其是在目前数据量比较大的情况下。 系统聚类: 系统聚类的思想是把每个样本看成一类,计算两两之间的距离,把距离最近的两个样本合并为一个新类,计算新类与其他样本的距离,对距离最近的再次合并,重复此过程,直到所有样本合并为一类;系统聚类的关键点为距离和不同量纲数据的标准化。  系统聚类主要函数介绍:  基于iris数据集的实例:    k-means聚类: k-means分类的思想是:先粗略分一下类,然后按照某种最优原则修改不合理的分类,直至分类趋于合理。 (iris.km <-kmeans(iris,3))
K-means clustering with 3 clusters of sizes 50, 62, 38
Cluster means:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.006000 3.428000 1.462000 0.246000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
## 聚类后的类标号,因为iris数据按照类别排列,发现2与3类别相对模糊;类别1聚类效果较好
Clustering vector:
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[46] 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2
[91] 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3
[136] 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
## 基于方差变异分解的思想,组间方差越大效果越好;
Within cluster sum of squares by cluster:
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS = 88.4 %)
## 聚类结果中的组件,可类似看成list中的元素;
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss"
[7] "size"
plot(iris[c("Sepal.Length", "Sepal.Width")], col = km$cluster)
## 画聚类的中心
points(km$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3,pch = 8, cex=2) 
聚类的最终目的是生成优良的”簇“,我理解簇是数据业务层面的理解;做一个好的聚类可能要有多轮循环,基于现有的数据聚类,簇评估及发现线索,基于新发现的线索对数据进行处理再次聚类,这其中可能包含数据指标的再提取、离异点的删除、数据的变换等。
本文仅介绍比较常见的两种聚类方法。
参考资料:
[1] 统计建模与R软件
[2] Rdatamining |