我有一个数据框df
,其中包含一堆点的x
和y
坐标。这是一个摘录:
> tail(df)
x y
1495 0.627174 0.120215
1496 0.616036 0.123623
1497 0.620269 0.122713
1498 0.630231 0.110670
1499 0.611844 0.111593
1500 0.412236 0.933250
我正在尝试找出最合适的群集数量。最终目标是用数万个这样的数据框来做到这一点,因此选择的方法必须快速且不可视。基于这些要求,似乎RWeka包是可行的方式。
我设法成功加载了RWeka软件包(我必须首先在我的计算机上安装Java SE Runtime)以及RWeka的软件包XMeans,然后运行它:
library("RWeka") # requires Java SE Runtime
WPM("refresh-cache") # Build Weka package metadata cache
WPM("install-package", "XMeans") # Install XMeans package if not previously installed
weka_ctrl <- Weka_control( # Create a Weka control object to specify our parameters
I = 100, # max no iterations overall
M = 100, # max no iterations in the kmeans loop
L = 2, # min no clusters
H = 5, # max no clusters
D = "weka.core.EuclideanDistance", # distance metric
C = 0.4, S = 1)
x_means <- XMeans(df, control = weka_ctrl) # run algorithm on data
这产生了我想要的结果:
XMeans
======
Requested iterations : 100
Iterations performed : 1
Splits prepared : 2
Splits performed : 0
Cutoff factor : 0.4
Percentage of splits accepted
by cutoff factor : 0 %
------
Cutoff factor : 0.4
------
Cluster centers : 2 centers
Cluster 0
0.4197712002617799 0.9346986806282739
Cluster 1
0.616697959239131 0.11564350951086963
Distortion: 30.580934
BIC-Value : 2670.359509
我可以通过运行x_means$class_ids
将数据框中的每个点分配到群集。
但是,我想找到一种检索聚类中心坐标的方法。我可以在输出中看到它们并手动写下来,但是如果我要运行成千上万的这些,我需要能够有一段代码将它们保存到变量中。我似乎无法使用方括号对x_means
进行分组,因此我不知道还能做什么。
非常感谢您的帮助!
答案 0 :(得分:1)
这些中心似乎没有直接存储在返回的结构中。但是,由于结构 告诉您每个点属于哪个集群,因此很容易计算中心。由于您不提供数据,我将使用内置的虹膜数据进行说明。
正如您所观察到的,打印结果显示了中心。我们可以用它来检查结果。
x_means <- XMeans(iris[,1:4], control = weka_ctrl)
x_means
## Output truncated to just the interesting part.
Cluster centers : 2 centers
Cluster 0
6.261999999999998 2.872000000000001 4.906000000000001 1.6760000000000006
Cluster 1
5.005999999999999 3.428000000000001 1.4620000000000002 0.2459999999999999
所以这是如何计算
colMeans(iris[x_means$class_ids==0,1:4])
Sepal.Length Sepal.Width Petal.Length Petal.Width
6.262 2.872 4.906 1.676
colMeans(iris[x_means$class_ids==1,1:4])
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.006 3.428 1.462 0.246
结果同意。