使用R中的apcluster包,可以“得分”非聚簇数据点

时间:2016-01-21 19:31:25

标签: r cluster-analysis

我是R的新手,我有一个请求,我不确定是否可能。我们有许多零售店,我的老板希望使用亲和力传播来分组。我们不会根据地理位置进行聚类。一旦他找到了他喜欢的配置,他希望能够输入其他位置来确定他们应该落入哪些集合中。

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

我理解这一点,还是有其他选择?

2 个答案:

答案 0 :(得分:3)

对于迟到的回答感到抱歉,我偶然发现了你的问题。

我同意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[apres@exemplars, ], xNew)

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

我可能会在将来的软件包版本中添加这样的predict()方法(我是软件包的维护者)。我希望有所帮助。

答案 1 :(得分:2)

群集不是分类的直接替代品。

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

然而,解决问题的常用方法很简单:

  1. 进行群集。
  2. 将群集标签用作类标签
  3. 训练分类器
  4. 将分类器应用于新数据