У меня есть таблица базы данных передачи данных между различными узлами. Это огромная база данных (около 40 миллионов переводов). Одним из атрибутов является количество байтов (nbytes), которые варьируются от 0 до 2 терабайт. Я хотел бы кластеризовать n-байты так, чтобы при заданных k кластерах некоторые передачи x1 принадлежали кластеру k1, x2 переводились в k2 и т. Д.
Исходя из терминологии, которую я использовал, вы могли догадаться, что я имел в виду: K-средства. Это 1d данные, так как nbytes - единственная функция, которая меня волнует. Когда я искал другие методы для этого, я увидел, что EM упоминался пару раз вместе с подходом, не связанным с кластеризацией. Я хотел бы узнать о ваших взглядах на то, как подойти к этой проблеме (в частности, кластеризовать или нет).
Благодарность!
источник
Ответы:
В одномерных данных не используйте кластерный анализ.
Кластерный анализ обычно является многомерной техникой. Или позвольте мне лучше сформулировать это по-другому: для одномерных данных, которые полностью упорядочены, существуют гораздо лучшие методы. Использование k-средних и подобных методов в данном случае - пустая трата, если только вы не приложите достаточно усилий, чтобы реально оптимизировать их для 1-го случая.
Просто чтобы дать вам пример: для k-средних обычно используют k случайных объектов в качестве начальных начальных чисел. Для одномерных данных довольно легко добиться большего успеха, просто используя соответствующие квантили (1 / 2k, 3 / 2k, 5 / 2k и т. Д.), После сортировки данных один раз и последующей оптимизации с этой начальной точки. Однако 2D данные не могут быть отсортированы полностью. И в сетке, скорее всего, будут пустые ячейки.
Я бы тоже не назвал это кластером. Я бы назвал это интервалом . Что вы действительно хотите сделать, это оптимизировать границы интервала. Если вы выполните k-means, он проверит для каждого объекта, будет ли он перемещен в другой кластер. Это не имеет смысла в 1D: нужно проверять только объекты на границах интервала. Это, очевидно, намного быстрее, так как там всего ~ 2 тыс. Объектов. Если они уже не предпочитают другие интервалы, больше центральных объектов тоже не будет.
Возможно, вы захотите изучить такие методы, как , например, оптимизация Jenks Natural Breaks .
Или вы можете сделать оценку плотности ядра и искать локальные минимумы плотности, чтобы разделить их там. Приятно то, что вам не нужно указывать k для этого!
PS пожалуйста используйте функцию поиска. Вот некоторые вопросы по 1-й кластеризации данных, которые вы пропустили:
источник
Ваш вопрос, следует ли вам кластеризовать или какой метод вы должны использовать для кластеризации?
Относительно того, следует ли кластеризовать, зависит, хотите ли вы автоматически разбивать данные (например, хотите ли вы повторить это разбиение несколько раз). Если вы делаете это только один раз, вы можете просто посмотреть на гистограмму распределения ваших значений и разбить ее на глаз, как это предлагается в комментариях. В любом случае, я бы порекомендовал взглянуть на данные, так как это может помочь вам определить, сколько кластеров вы хотите, а также «работала» ли кластеризация.
Относительно типа кластеризации, k-средних должно быть хорошо, если в данных есть «реальные» кластеры. Если вы не видите кластеров на гистограмме, кластеризовать их все равно не имеет смысла, так как любое разбиение диапазона данных даст действительные кластеры (или в случае случайного запуска kmeans вы получите разные кластеры). каждый пробег).
источник
Можешь попробовать:
KMeans, GMM или другие методы, указав n_clusters = no. пиков в графике плотности ядра.
KMeans, GMM или другие методы определения оптимального нет. кластеров на основе некоторых метрик. Дополнительная информация: [здесь] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set
источник