在 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 模型的主要内容,如果未能解决你的问题,请参考以下文章