在R中,是否存在用于创建大致相等大小的簇的算法

时间:2015-01-06 18:34:40

标签: r cluster-analysis

似乎有很多关于创建分层或k-means集群的信息。但我想知道在R中是否存在可以创建大小相等的K簇的解决方案。有一些关于在其他语言中这样做的东西,但我无法在互联网上找到任何建议如何在R中获得结果的东西。

一个例子是

set.seed(123)
df <- matrix(rnorm(100*5), nrow=100)
km <- kmeans(df, 10)
print(sapply(1:10, function(n) sum(km$cluster==n)))

导致

[1] 14 12  4 13 16  6  8  7 13  7

我希望看到

[1] 10 10 10 10 10 10 10 10 10 10 

2 个答案:

答案 0 :(得分:0)

首先,我认为你不应该这样做。为什么?当您的数据中存在天然格式良好的群集时,例如

def done(self, form_list, **kwargs):

    survey_counter = Counter.objects.get_or_create(survey_wizard_type= 'survey_wizard_one')[0] # x can be any value from one to nine
    survey_counter.survey_wizard_count = F('survey_wizard_count') + 1 
    survey_counter.save()

    for form in form_list:
        form.save()

    return render(self.request, 'Return_to_AMT.html', {
        'form_data': [form.cleaned_data for form in form_list],            
    }) 

然后这些将聚集在一起(假设k等于聚类的自然n;参见this comprehensive answer关于如何选择一个好的k)。如果它们的大小一致,那么你将拥有大小相等的簇;如果它们不是,那么强制统一的簇大小肯定会降低聚类解决方案的适应性。 如果您的数据中没有自然漂亮的聚类,例如

blockSample("testthis") { (answer) -> () in
    answer  //  this will force the live display of the value for 'answer'
    print(answer)
}

然后强制一个簇大小将是多余的(如果数据是完全随机的,簇大小将是〜相等 - 但无论如何聚类没有多少点),或者,如果有一些很好的簇在那里,例如,

plot(matrix(c(sample(1:10,10),sample(30:40, 7), sample(80:90,9)), ncol=2, byrow = F))

然后强制尺寸几乎肯定会破坏它们。

然而,JasonAizkalns在评论中提到的Ward的方法会给你更多的回合&#34;&#34;例如,与单链接相比,形状集群可能是一种方法(参见plot(matrix(c(sample(1:100, 100), ncol=2))) 表示D和D2之间的差异,它不是任意的。)

答案 1 :(得分:-2)

它并不完全清楚你在问什么,但在R中生成随机数据非常容易。如果你的数据集有两个维度,你可以这样做 -

cluster1 = data.frame(x = rnorm(100, mean=5,sd=1), y  = rnorm(100, mean=5,sd=1))
cluster2 = data.frame(x = rnorm(100, mean=15,sd=1), y  = rnorm(100, mean=15,sd=1))

这会在x和y上为每个群集中的100个数据点生成正态分布的随机数据。

然后查看它 -

plot(cluster1, xlim = c(0,25), ylim = c(0,25))
lines(cluster2, type = "p")!