Каковы могут быть причины того, что 95% образцов принадлежат одному кластеру, когда есть 5 кластеров?

Вопрос или проблема

”’Я использовал алгоритм k-means для кластеризации набора документов, содержащих только текстовые данные.

Документ содержит 2 миллиона записей.

Удивительно, но результат кластеризации следующий:

90% записей хранится в одном кластере, остальные записи распределены по другим кластерам.

Это не проблема, если будет выбран правильный кластер при предсказании данных. Я предположил, что неравномерное распределение кластеров может быть причиной моей проблемы. Если это не проблема, Подскажите, как k-means сможет предсказать правильный кластер.

Почему это происходит?

Параметры : количество кластеров = 5 (использован метод локтя для определения этого), random state = 0 или 42 (оба использовались, но без пользы)


# Вот мой код, показывающий, как я создавал векторы

from sklearn.feature_extraction.text import TfidfVectorizer
import _pickle as cPickle

def build_tfidf_vect(series, save_model=True):
    vectorizer = TfidfVectorizer(stop_words="english")
    vectors = vectorizer.fit_transform(series)
    print("Форма матрицы tfidf: {}".format(vectors.shape))
    если save_model:
        data_struct = {'vectors': vectors, 'vectorizer': vectorizer}
        with open('data_2l.bin', 'wb') as f:
            cPickle.dump(data_struct, f)
    return vectorizer, vectors

import pandas as pd

feed = pd.read_csv('2l_data.csv', encoding='latin')

build_tfidf_vect(feed['Column_name'])

Вот как я создавал кластеры.


from sklearn.cluster import MiniBatchKMeans
import scipy

def load_tf_idfvectors():
    import time
    import _pickle as cPickle
    with open(r'C:\Users\data_2l.bin', 'rb') as f:
        data_struct = cPickle.load(f)
        vectors, vectorizer = data_struct['vectors'], data_struct['vectorizer']
    return vectorizer, vectors

def dump(cluster_0, cluster_1, cluster_2, cluster_3, cluster_4):
    save_model=True
    если save_model:
        data_struct = {'cluster0': cluster_0, 'cluster1': cluster_1, 'cluster2': cluster_2, 'cluster3': cluster_3, 'cluster4': cluster_4}
        with open(r'C:\Users\totalclusters_2l.bin', 'wb') as f:
            cPickle.dump(data_struct, f)

import pandas as pd
import pickle
data=pd.read_csv(r"C:\Users\New_vectors_data_2l.csv", encoding="latin")
tfidf_vectorizer, tfidf=load_tf_idfvectors()

kmeans = MiniBatchKMeans(n_clusters=5, init="k-means++", random_state=0).fit(tfidf)
labels = kmeans.fit_predict(tfidf)
X_n=pd.DataFrame(tfidf,columns=['tf-idf'])
labels_n=pd.DataFrame(labels,columns=['cl_n'])
result = pd.concat([data['Column_name'], X_n, labels_n])
pickle.dump(kmeans, open(filename, 'wb'))
results_0=result.loc[result['cl_n'] ==0 , ['tf-idf','cl_n']]
cluster_0_tf = scipy.sparse.vstack(results_0['tf-idf'].tolist())
.
.
.
results_0=results_0.reset_index()
.
.
cluster0_in=results_0['index'].tolist()
.
.
open_file = open(r'C:\Users\cluster0_2l', "wb")
pickle.dump(cluster0_in, open_file)
open_file.close()
.
.
.....

```

Насколько я знаю, MiniBatchKMeans имеет изменяющуюся функцию ‘predict’ по замыслу.
В каждом пакете центроиды рассчитываются на основании данных до этого момента.
Это означает, что один и тот же ввод может получить разную предсказанную метку (кластер) в зависимости от пакета, в который он попал.
Смотрите этот ответ.

Компромисс между поддержкой непрерывно передаваемых данных (позволяющей модели динамически обучаться) и наличием постоянных результатов для каждого ввода (поскольку у модели есть только один контекст обучения — одно мероприятие ‘fit’).

Ответ или решение

Причина, по которой 95% образцов относятся к одному кластеру при наличии пяти кластеров, может заключаться в нескольких факторах, связанных как с характеристиками данных, так и с особенностями алгоритма кластеризации. Рассмотрим каждую из них:

Подготовка и характеристики данных

  1. Высокая однородность данных: Текстовые данные, которые вы пытаетесь кластеризовать, могут быть слишком однородными. В этом случае многие документы могут быть очень похожи друг на друга, что приводит к доминированию одного кластера.

  2. Выбор функций: Использование TfidfVectorizer для преобразования текстовых данных в векторное представление является стандартным подходом. Однако итоговое количество признаков может оказаться излишне большим или неадекватно отражать различия в данных, что затрудняет формирование равномерных кластеров.

  3. Неправильная нормализация: Возможно, данные нуждаются в дополнительной нормализации или стандартизации до применения алгоритма кластеризации, что может улучшить их маркировку.

Технические аспекты алгоритма

  1. Количественные параметры: Возможно, число кластеров, определенное методом локтя (elbow method), все же не оптимально. Хотя метод и является популярным, он не всегда отражает истинную специфику наборов данных, особенно больших и сложных.

  2. Начальные условия: При каждой итерации MiniBatchKMeans может иметь разные начальные центроиды. Даже использование фиксированного значения random_state не исключает возможности получения нестабильных решений для кластеров.

  3. Артфакты метода MiniBatchKMeans: Метод MiniBatchKMeans известен своей скоростью за счет использования небольших порций данных и часто менее точным результатом по сравнению с традиционным KMeans. Это предполагает, что кластеризация может сильно зависеть от данных, поступающих в начале раунда.

Решения и рекомендации

  1. Анализируйте и предобрабатывайте данные: Убедитесь, что ваши данные нормально распределены и адекватно нормализованы. Возможно, стоит рассмотреть снижение размерности признаков с помощью методов, таких как PCA (Principal Component Analysis).

  2. Переосмыслите параметры кластеризации: Экспериментируйте с различным количеством кластеров и оцените результаты с точки зрения бизнес-задач и качества кластеров.

  3. Стабильность модели: Чтобы избежать нестабильности, можно рассмотреть применение традиционного KMeans или попробовать алгоритмы, такие как Gaussian Mixture Models (GMM), которые могут быть более устойчивы к изменчивости начальных условий.

  4. Анализирующие визуализации: Используйте методы визуализации данных, такие как двумерные отображения через t-SNE или UMAP, чтобы увидеть, как ваши данные распределены в пространстве признаков.

В заключение, важно оценить специфику ваших данных и цели кластеризации, прежде чем принимать решение о методах и параметрах анализа. Применение вышеуказанных стратегий поможет достичь более равномерного распределения данных по кластерам и повысить точность кластеризации.

Оцените материал
Добавить комментарий

Капча загружается...