編集:この質問の答えが頻繁にで議論されていますSum in Spark gone badCompute Cost of KmeansでKMeansのアンバランス要因?
、我々は1つが彼の関数kmeansモデルのコストを計算する方法を説明しました。不均衡の要因を計算できるかどうか疑問に思っていましたか?
Sparkが提供する機能がない場合は、これを実装する簡単な方法はありますか?
私はアンバランスの要因のための参照を見つけることができませんでしたが、それは(私のコメント)ヤエルのunbalanced_factorのようになります。
// @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を発見しました。
したがって、(合計)はクラスタに割り当てられたポイントの数(データセットのサイズに等しい)に等しくなり、uf
(不平衡係数の場合)はクラスタに割り当てられたポイント。
最後に、uf = uf * n/(tot * tot);
を使用して計算します。それはのようなものかもしれないpython
で
あなたはバランス係数であるかについての言及を示してもらえますか? –
@AlbertoBonsantoそれは重心ごとにいくつのポイントがあるかです。すなわち、データセットのポイントを重心に割り当てた後(推測すると 'predict() 'となります)、データが重心を超えてバランスされているかどうかを示す係数を計算します。興味深いことに、私は良い評判を見つけることができませんが、あなたは正しいアイデアを得ることができますか?私は2セントロイドがあり、100ポイントが第1の重心に割り当てられ、10が第2のセントロイドに割り当てられる場合、バランス係数は悪くなければならない。 1位に60ポイント、2位に50ポイントがある場合、バランス係数は可能なはずです。だから基本的に1つの#pointsを数えたいと思っています。 – gsamaras
しかし、私は不均衡のために、@AlbertoBonsantoが見つかりました! – gsamaras