#scipy #cluster-analysis #data-mining #scikit-learn #mcmc
#scipy #кластерный анализ #интеллектуальный анализ данных #scikit-learn #mcmc
Вопрос:
У меня есть 4-мерные данные, которые необходимо сгруппировать, чтобы построить эллипсоиды минимального объема, ограничивающие каждый кластер. Я не хочу иметь одноточечные кластеры или, по крайней мере, как можно меньшее количество одноточечных кластеров, потому что мы не можем построить эллипсоидальную доверительную область с одной точкой. В моей проблеме количество кластеров не задано заранее. Итак, я использую Scikit-learn’s Affinity Propagation Propagation — http://scikit-learn.org/stable/modules/clustering.html#affinity-propagation оценить количество кластеров и выполнить кластеризацию на основе данных. Но этот подход дает мне так много одноточечных кластеров. Можете ли вы рассказать о том, как решить эту проблему?
P.S: Чтобы предоставить вам еще больше информации, я работаю над эллипсоидной вложенной выборкой для вычисления байесовских доказательств.
Комментарии:
1. Может быть, сначала удалить выбросы?
2. Удаление выбросов, безусловно, помогло бы. Возможно, вы даже захотите рассмотреть возможность использования модели гауссовой смеси. Количество составляющих гауссианов может быть выбрано на основе критерия AIC или BIC.
Ответ №1:
Я не знаю, настаиваете ли вы на распространении аффинности или нет, но используя DBSCAN, вы можете достичь желаемого с помощью параметров алгоритма, eps и minPts.
Больший eps означает, что могут быть обнаружены кластеры с меньшей плотностью, а также будут объединены близлежащие кластеры.
Чем больше MINPTS, тем больше данных будет помечено как шум.
Ответ №2:
В распространении аффинности нет концепции эллипсоидов, поэтому я не уверен, что оно делает то, что вы хотите.
MultiNest решает эту проблему с помощью варианта кластеризации X-means. По сути, сначала вы создаете завершающий эллипсоид, покрывающий все точки. Затем вы определяете наиболее важную ось и размещаете два эллипсоида с k-средними значениями на каждом конце и сближаете их. Теперь вы можете решить, использует ли двухэллипсоид намного меньший объем, чем одиночный эллипсоид. Затем процесс повторяется рекурсивно. nestle — это реализация с открытым исходным кодом с довольно понятным кодом: https://github.com/kbarbary/nestle /
В качестве альтернативы, вы также можете поместить эллипсоид вокруг каждой точки и определить радиус с помощью K-сворачивания или начальной загрузки. Это то, что использует MLFriends; реализация, объяснение и анимация по адресу: https://johannesbuchner.github.io/UltraNest/method.htmlЗдесь ковариация эллипсоида может быть сначала выбрана с использованием ковариации выборки, и когда кластеры обнаружены, их можно соцентрировать и определить общую ковариацию выборки. Для определения радиуса вы опускаете некоторые контрольные точки и убедитесь, что эллипсоиды вокруг обучающих точек достаточно велики, чтобы восстановить контрольные точки. Это довольно стабильно и не зависит от параметров.
DBSCAN также может быть интересным для изучения. Однако в конечном итоге вам понадобятся твердые, а не размытые поверхности предложений для вложенной выборки.