Как оценить количество кластеров для цветового квантования с помощью kmeans2
Я хочу квантовать некоторые изображения с помощью алгоритма kmeans2. Моя проблема состоит в том, чтобы найти (почти) лучшее количество кластеров.
У кого-нибудь есть идеи, как оценить количество кластеров? Моя идея состоит в том, чтобы создать кумулятивную гистограмму оттенка в hsv-color-space. Но я не знаю, как использовать эту информацию для оценки количества.
Привет
1 ответ
Я лично использую следующий подход:
Псевдокод:
int k = 1;
double oldCompactness = std::numeric_limits<double>::max();
double compactness = kmeans(data, k);
while( compactness/oldCompactness < threshold ) {
oldCompactness = compactness;
k = k + 1;
compactness = kmeans(data, k);
}
Компактность уменьшается с увеличением количества кластеров (она должна стать нулевой, если у вас столько кластеров, сколько точек данных).
Следует отметить, что оптимальное количество кластеров зависит от приложения. Например, в вашем приложении я не знаю, предпочитаете ли вы высокое сокращение данных (низкий k) или хорошее визуальное представление (высокий k) или компромисс (где-то посередине).
Вы можете посмотреть здесь больше / лучших идей. Или здесь (неделя 8), если вы предпочитаете видео.