【发布时间】:2017-01-07 05:10:45
【问题描述】:
编辑:这个问题的答案在Sum in Spark gone bad
中得到了大量讨论在Compute Cost of Kmeans 中,我们看到了如何计算他的 KMeans 模型的成本。我想知道我们是否能够计算不平衡因子?
如果Spark没有提供这样的功能,有没有简单的方法来实现呢?
我无法找到 Unbalanced 因子的 ref,但它应该类似于 Yael 的 unbalanced_factor(我的 cmets):
// @hist: the number of points assigned to a cluster
// @n: the number of clusters
double ivec_unbalanced_factor(const int *hist, long n) {
int vw;
double tot = 0, uf = 0;
for (vw = 0 ; vw < n ; vw++) {
tot += hist[vw];
uf += hist[vw] * (double) hist[vw];
}
uf = uf * n / (tot * tot);
return uf;
}
我找到了here。
所以这个想法是tot(总计)将等于分配给集群的点数(即等于我们数据集的大小),而uf(不平衡因子)保持平方分配给集群的点数。
最后他使用uf = uf * n / (tot * tot);来计算它。
【问题讨论】:
-
你能提供一个关于什么是平衡因子的参考吗?
-
@AlbertoBonsanto 它是每个质心有多少点,即在将数据集的点分配给质心之后(我猜是
predict()),计算一个表明数据是否平衡的因子跨质心。有趣的是我找不到一个好的参考,但你明白了吗?如果我有 2 个质心,第一个质心分配 100 个点,第二个质心分配 10 个点,那么平衡因子应该不好。如果第一个有60分,第二个有50分,那么平衡因子应该是可以的。所以基本上一个人想计算分配给每个质心的#points -
但我发现不平衡,@AlbertoBonsanto,更新了!
-
好吧,如果
Apache Spark的KMeansModel内部没有任何实现,我认为它很容易实现。
标签: apache-spark machine-learning pyspark k-means bigdata