Edit: Ответ эти вопросы сильно обсуждается в: Sum in Spark gone badНесбалансированный коэффициент KMeans?
В Compute Cost of Kmeans, мы увидели, как можно вычислить стоимость его модели 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.
Так идея заключается в том, что tot
(для всего) будет равно числу точек, назначенных для кластеров (т.е. равен размеру нашего набора данных), в то время как uf
(для несбалансированного фактора) имеет квадрат числа точек, назначенных кластеру.
И, наконец, он использует uf = uf * n/(tot * tot);
, чтобы вычислить его.
Не могли бы вы показать ссылку о том, что является фактором баланса? –
@AlbertoBonsanto - это то, сколько точек у каждого центроида есть, т. Е. После присвоения точек набора данных центроидам (с помощью 'прогноза(), я думаю), вычислите коэффициент, который будет указывать, сбалансированы ли данные по центроидам. Интересно, что я не могу найти хорошую ссылку, но вы поняли, что правильно? Если у меня есть 2 центроида и 100 очков назначены на 1-й центроид, а 10 на 2-й, то коэффициент баланса должен быть плохим. Если 1-й имеет 60 пунктов и 2-й 50, то коэффициент баланса должен быть. Поэтому в основном хотелось бы подсчитать #points, которым присваивается каждый centroid – gsamaras
Но я нашел для неуравновешенного @AlbertoBonsanto, обновленный! – gsamaras