在 R 中的新数据集上使用已经创建的 kmeans kluster 模型

Posted

技术标签:

【中文标题】在 R 中的新数据集上使用已经创建的 kmeans kluster 模型【英文标题】:Using an already created kmeans kluster model on a new data set in R 【发布时间】:2016-04-25 03:49:16 【问题描述】:

我已经在 R (kmeans) 中建立了一个集群模型:

fit <- kmeans(sales_DP_DCT_agg_tr_bel_mod, 4)

现在我想使用这个模型并分割一个全新的数据集。我该怎么做:

    存储模型 在新数据集上运行模型?

【问题讨论】:

可能duplicate 【参考方案1】:

假设您使用 iris 作为数据集。

data = iris[,1:4] ## Don't want the categorical feature
model = kmeans(data, 3)

这是输出的样子:

>model
K-means clustering with 3 clusters of sizes 96, 33, 21

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     6.314583    2.895833     4.973958   1.7031250
2     5.175758    3.624242     1.472727   0.2727273
3     4.738095    2.904762     1.790476   0.3523810

Clustering vector:
  [1] 2 3 3 3 2 2 2 2 3 3 2 2 3 3 2 2 2 2 2 2 2 2 2 2 3 3 2 2 2 3 3 2 2 2 3 2 2 2 3 2 2 3 3 2 2 3 2 3 2 2 1 1 1 1 1 1 1 3 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [76] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 3 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 1 1 1 1 1

Within cluster sum of squares by cluster:
[1] 118.651875   6.432121  17.669524
 (between_SS / total_SS =  79.0 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"

请注意,您可以使用 model$centers 访问质心。对传入样本进行分类所需要做的就是找到它最接近的质心。您可以如下定义欧式距离函数:

eucDist <- function(x, y) sqrt(sum( (x-y)^2 ))

然后是一个分类函数:

classifyNewSample <- function(newData, centroids = model$centers) 
  dists = apply(centroids, 1, function(y) eucDist(y,newData))
  order(dists)[1]


> classifyNewSample(c(7,3,6,2))
[1] 1
> classifyNewSample(c(6,2.7,4.3,1.4))
[1] 2

就模型持久性而言,请查看?save here。

编辑:

将预测函数应用于新矩阵:

## I'm just generating a random matrix of 50x4 here:
r <- 50
c <- 4
m0 <- matrix(0, r, c)
new_data = apply(m0, c(1,2), function(x) sample(seq(0,10,0.1),1))
new_labels = apply(new_data, 1, classifyNewSample)

>new_labels
[1] 1 2 3 3 2 1 3 1 3 1 2 3 3 1 1 3 1 1 1 3 1 1 1 1 1 1 3 1 1 3 3 1 1 3 2 1 3 2 3 1 2 1 2 1 1 2 1 3 2 1

【讨论】:

以上是关于在 R 中的新数据集上使用已经创建的 kmeans kluster 模型的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr 和 broom 在训练和测试集上计算 kmeans

如何在新数据集上评分

机器学习 - KMean

大型数据集上的 R 中的 hclust()

R中的k均值返回值

Kmeans肘子方法不返回肘子。