2016-01-21 201 views
-1

我是R新手,我有一个我不确定的请求是否可能。我们有许多零售地点,我的老板想用亲和力传播方式将其分为群集。我们不会根据地理位置进行聚类。一旦他找到了他喜欢的配置,他希望能够输入其他位置来确定它们应该落入哪些集合集群。使用R中的apcluster软件包,可以对非集群数据点“评分”

我所能想出的唯一解决方案是使用相同的选项并重新聚集原始点和添加新的点,但是我相信这可能会改变结果。

我是否理解这个权利,还是有其他选择?

回答

2

集群不是分类的直接替换。

很少有聚类算法可以有意义地整合新信息。

您的问题通常的做法不过是简单的:

  1. 做集群。
  2. 使用集群作为标签的分类标记
  3. 训练分类
  4. 分类应用到新的数据
2

对不起,我迟到的答案,我只是顺便绊了你的问题。

我同意Anony-Mousse的回答:聚类是第一步,分类是第二步。不过,我不确定这是否是最佳选择。 Elena601b显然是在讨论一个真正具有空间数据的任务,所以我的印象是,最好的方法是首先进行聚类,然后通过查找最接近的聚类范例来“分类”新的点/样本/位置。下面是合成数据的一些代码:

## if not available, run the following first: 
## install.packages("apcluster") 

library(apcluster) 

## create four synthetic 2D clusters 
cl1 <- cbind(rnorm(30, 0.3, 0.05), rnorm(30, 0.7, 0.04)) 
cl2 <- cbind(rnorm(30, 0.7, 0.04), rnorm(30, 0.4, .05)) 
cl3 <- cbind(rnorm(20, 0.50, 0.03), rnorm(20, 0.72, 0.03)) 
cl4 <- cbind(rnorm(25, 0.50, 0.03), rnorm(25, 0.42, 0.04)) 
x <- rbind(cl1, cl2, cl3, cl4) 

## run apcluster() (you may replace the Euclidean distance by a different 
## distance, e.g. driving distance, driving time) 
apres <- apcluster(negDistMat(r=2), x, q=0) 

## create new samples 
xNew <- cbind(rnorm(10, 0.3, 0.05), rnorm(10, 0.7, 0.04)) 

## auxiliary predict() function 
predict.apcluster <- function(s, exemplars, newdata) 
{ 
    simMat <- s(rbind(exemplars, newdata), 
       sel=(1:nrow(newdata)) + nrow(exemplars))[1:nrow(exemplars), ] 
    unname(apply(simMat, 2, which.max)) 
} 

## assign new data samples to exemplars 
predict.apcluster(negDistMat(r=2), x[[email protected], ], xNew) 

## ... the result is a vector of indices to which exemplar/cluster each 
## data sample is assigned 

我可能会在未来的包装的版本中增加这样一个predict()方法(我是包的维护者)。我希望有所帮助。

相关问题