2016-08-05 2 views
0

Я пытаюсь использовать MiniBatchKMeans для потоковой передачи данных NLP и группировки, но не имеет способа определить, сколько кластеров мне нужно. То, что я хотел бы сделать, это периодически брать силуэт, и если он опускается ниже определенного порога, увеличьте количество центроидов. Но, насколько я могу судить, n_clusters устанавливается при инициализации кластера и не может быть изменен без перезапуска. Я здесь не прав? Есть ли другой способ приблизиться к этой проблеме, чтобы избежать этой проблемы?Возможно ли увеличить количество центроидов в KMeans во время установки?

+2

Несмотря на то, что k-средство эвристическое, я уверен, что изменение количества кластеров во время работы будет иметь крайне негативные последствия для используемого алгоритма чередующегося минимизации (вы застряли в локальный минимум и получил только там из-за устаревших параметров). Это, по крайней мере, то, что я думаю! Просто оптимизируйте для разных значений '' 'n_cluster''' и сравните свои баллы (если вы им доверяете). k-средства должны быть достаточно быстрыми, чтобы сделать такую ​​стратегию валидации. Такой подход будет намного более стабильным! – sascha

ответ

2

Это не рекомендуется делать во время оптимизации, так как существенно изменяет процедуру оптимизации. Это приведет к потере всей оптимизации. Существуют стратегии, такие как деление пополам k-средств, которые пытаются узнать значение k во время кластеризации, но они немного сложнее, чем увеличение k на единицу - они решают, какой именно кластер разбивается, и попытайтесь выбрать хорошие начальные центроиды для этот кластер, чтобы держать вещи несколько стабильными.

Кроме того, увеличение k не обязательно улучшит силуэт. Это будет тривиально улучшать SSQ, поэтому вы не можете использовать SSQ как эвристику для выбора k.

И последнее, но не менее важное: вычисление Силуэта - O (n^2). Слишком дорого работать. Если у вас достаточно большого объема данных, чтобы требовать MiniBatchKMeans (который действительно предназначен только для массивных данных), то вы явно не можете позволить себе вычислять Силуэт вообще.

+0

Хорошо, спасибо, я не знал этого, и это> 50 гб метаданных, так что да, это большой –

+0

Тогда позвольте мне дать вам один важный совет: ** сначала используйте образец ** **, чтобы проверить ваш подход. Только масштабные подходы, которые * работают * до полных данных. Потому что, по моему опыту, k-значит вас разочарует (пожалуйста, дайте мне знать, дали ли вам хорошие результаты!). Я всегда подумывал о том, чтобы сделать некоторую работу над k-средствами (и у меня есть интересные идеи), но это никогда не работал хорошо на моих проблемах. –

+0

Я использовал его на образце, он работал достаточно хорошо –

Смежные вопросы