当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R kmeans K 均值聚类


R语言 kmeans 位于 stats 包(package)。

说明

对数据矩阵执行 k-means 聚类。

用法

kmeans(x, centers, iter.max = 10, nstart = 1,
       algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
                     "MacQueen"), trace = FALSE)
## S3 method for class 'kmeans'
fitted(object, method = c("centers", "classes"), ...)

参数

x

数据的数字矩阵,或可以强制转换为此类矩阵的对象(例如数字向量或包含所有数字列的 DataFrame )。

centers

或者是簇的数量,比如 ,或者是一组初始(不同的)簇中心。如果是数字,则选择 x 中的一组随机(不同)行作为初始中心。

iter.max

允许的最大迭代次数。

nstart

如果centers是一个数字,应该选择多少个随机集?

algorithm

字符:可以缩写。请注意,"Lloyd""Forgy" 是一种算法的替代名称。

object

一个R类的对象"kmeans",通常结果obob <- kmeans(..).

method

字符:可以缩写。 "centers" 导致 fitted 返回聚类中心(每个输入点一个),"classes" 导致 fitted 返回类分配向量。

trace

逻辑或整数,当前仅在默认方法("Hartigan-Wong")中使用:如果为正(或为真),则生成有关算法进度的跟踪信息。较高的值可能会产生更多的跟踪信息。

...

不曾用过。

细节

x 给出的数据通过 -means 方法进行聚类,该方法旨在将点划分为 组,以使从点到指定聚类中心的平方和最小化。至少,所有聚类中心都位于其 Voronoi 集(最接近聚类中心的数据点集)的平均值。

默认使用 Hartigan 和 Wong (1979) 的算法。请注意,一些作者使用 - 表示特定算法而不是通用方法:最常见的是 MacQueen (1967) 给出的算法,但有时是 Lloyd (1957) 和 Forgy (1965) 给出的算法。 Hartigan-Wong 算法通常比这两种算法都做得更好,但通常建议尝试多次随机启动 ( nstart )。在极少数情况下,当某些点( x 的行)非常接近时,算法可能不会在 “Quick-Transfer” 阶段收敛,从而发出警告(并返回 ifault = 4 )。在这种情况下,建议对数据进行轻微舍入。

为了便于编程探索,允许 ,特别是返回中心和 withinss

除了Lloyd-Forgy方法外,如果指定了数字,则始终返回 簇。如果提供了初始中心矩阵,则可能没有点最接近一个或多个中心,这目前对于 Hartigan-Wong 方法来说是一个错误。

kmeans 返回 "kmeans" 类的对象,该类具有 printfitted 方法。它是一个至少包含以下组成部分的列表:

cluster

整数向量(来自 1:k ),指示每个点分配到的簇。

centers

聚类中心矩阵。

totss

总平方和。

withinss

簇内平方和的向量,每个簇一个分量。

tot.withinss

簇内总平方和,即 sum(withinss)

betweenss

between-cluster 平方和,即 totss-tot.withinss

size

每个簇中的点数。

iter

(外部)迭代的次数。

ifault

整数:可能的算法问题的指示符 - 对于专家来说。

注意

簇在返回的对象中进行编号,但它们是一个集合,并且不暗示任何顺序。 (它们的明显顺序可能因平台而异。)

例子

require(graphics)

# 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 = 1:2, pch = 8, cex = 2)

# sum of squares
ss <- function(x) sum(scale(x, scale = FALSE)^2)

## cluster centers "fitted" to each obs.:
fitted.x <- fitted(cl);  head(fitted.x)
resid.x <- x - fitted(cl)

## Equalities : ----------------------------------
cbind(cl[c("betweenss", "tot.withinss", "totss")], # the same two columns
         c(ss(fitted.x), ss(resid.x),    ss(x)))
stopifnot(all.equal(cl$ totss,        ss(x)),
	  all.equal(cl$ tot.withinss, ss(resid.x)),
	  ## these three are the same:
	  all.equal(cl$ betweenss,    ss(fitted.x)),
	  all.equal(cl$ betweenss, cl$totss - cl$tot.withinss),
	  ## and hence also
	  all.equal(ss(x), ss(fitted.x) + ss(resid.x))
	  )

kmeans(x,1)$withinss # trivial one-cluster, (its W.SS == ss(x))

## random starts do help here with too many clusters
## (and are often recommended anyway!):
## The ordering of the clusters may be platform-dependent.
## IGNORE_RDIFF_BEGIN
(cl <- kmeans(x, 5, nstart = 25))
## IGNORE_RDIFF_END
plot(x, col = cl$cluster)
points(cl$centers, col = 1:5, pch = 8)

参考

Forgy, E. W. (1965). Cluster analysis of multivariate data: efficiency vs interpretability of classifications. Biometrics, 21, 768-769.

Hartigan, J. A. and Wong, M. A. (1979). Algorithm AS 136: A K-means clustering algorithm. Applied Statistics, 28, 100-108. doi:10.2307/2346830.

Lloyd, S. P. (1957, 1982). Least squares quantization in PCM. Technical Note, Bell Laboratories. Published in 1982 in IEEE Transactions on Information Theory, 28, 128-137.

MacQueen, J. (1967). Some methods for classification and analysis of multivariate observations. In Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability, eds L. M. Le Cam & J. Neyman, 1, pp. 281-297. Berkeley, CA: University of California Press.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 K-Means Clustering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。