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 |
或者是簇的数量,比如 |
iter.max |
允许的最大迭代次数。 |
nstart |
如果 |
algorithm |
字符:可以缩写。请注意, |
object |
一个R类的对象 |
method |
字符:可以缩写。 |
trace |
逻辑或整数,当前仅在默认方法( |
... |
不曾用过。 |
细节
x
给出的数据通过 -means 方法进行聚类,该方法旨在将点划分为 组,以使从点到指定聚类中心的平方和最小化。至少,所有聚类中心都位于其 Voronoi 集(最接近聚类中心的数据点集)的平均值。
默认使用 Hartigan 和 Wong (1979) 的算法。请注意,一些作者使用 nstart
)。在极少数情况下,当某些点( x
的行)非常接近时,算法可能不会在 “Quick-Transfer” 阶段收敛,从而发出警告(并返回 ifault = 4
)。在这种情况下,建议对数据进行轻微舍入。 - 表示特定算法而不是通用方法:最常见的是 MacQueen (1967) 给出的算法,但有时是 Lloyd (1957) 和 Forgy (1965) 给出的算法。 Hartigan-Wong 算法通常比这两种算法都做得更好,但通常建议尝试多次随机启动 (
为了便于编程探索,允许 withinss
。 ,特别是返回中心和
除了Lloyd-Forgy方法外,如果指定了数字,则始终返回 簇。如果提供了初始中心矩阵,则可能没有点最接近一个或多个中心,这目前对于 Hartigan-Wong 方法来说是一个错误。
值
kmeans
返回 "kmeans"
类的对象,该类具有 print
和 fitted
方法。它是一个至少包含以下组成部分的列表:
cluster |
整数向量(来自 |
centers |
聚类中心矩阵。 |
totss |
总平方和。 |
withinss |
簇内平方和的向量,每个簇一个分量。 |
tot.withinss |
簇内总平方和,即 |
betweenss |
between-cluster 平方和,即 |
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 kruskal.test Kruskal-Wallis 秩和检验
- R kernapply 应用平滑核
- R ksmooth 核回归更平滑
- R kernel 平滑内核对象
- R ks.test 柯尔莫哥洛夫-斯米尔诺夫检验
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
- R deriv 简单表达式的符号和算法导数
- R quade.test 四方测试
- R decompose 移动平均线的经典季节性分解
- R plot.stepfun 绘制阶跃函数
- R alias 查找模型中的别名(依赖项)
- R qqnorm 分位数-分位数图
- R eff.aovlist 多层方差分析的计算效率
- R pairwise.t.test 成对 t 检验
- R loglin 拟合对数线性模型
- R predict.smooth.spline 通过平滑样条拟合进行预测
- R bartlett.test 方差齐性的 Bartlett 检验
- R influence.measures 回归删除诊断
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 K-Means Clustering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。