似乎有很多关于创建分层或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
答案 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")!