Зачем использовать LSA перед K-Means при кластеризации текста

Я следую этому руководству от Scikit, изучая кластеризацию текста с использованием K-Means: http://scikit-learn.org/stable/auto_examples/text/document_clustering.html

В этом примере опционально LSA (с использованием SVD) используется для выполнения уменьшения размерности.

Почему это полезно? Количество измерений (признаков) уже можно контролировать в векторизаторе TF-IDF с помощью параметра «max_features».

Я понимаю, что LSA (и LDA) также являются методами тематического моделирования. Отличие кластеризации в том, что документы относятся к нескольким темам, но только к одному кластеру. Я не понимаю, почему LSA будет использоваться в контексте кластеризации K-средних.

Пример кода:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

documents = ["some text", "some other text", "more text"]

tfidf_vectorizer = TfidfVectorizer(max_df=0.5, max_features=10000, min_df=2, stop_words='english', use_idf=True)
X = tfidf_vectorizer.fit_transform(documents)

svd = TruncatedSVD(1000)
normalizer = Normalizer(copy=False)
lsa = make_pipeline(svd, normalizer)
Xnew = lsa.fit_transform(X)

model = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
model.fit(Xnew)

person Niko Nelissen    schedule 22.02.2017    source источник


Ответы (2)


Существует документ, в котором показано, что собственные векторы PCA являются хорошими инициализаторами для K-средних. .

Управление размером с помощью параметра max_features эквивалентно сокращению размера словаря, что имеет негативные последствия. Например, если вы установите max_features равным 10, модель будет работать с наиболее распространенными 10 словами в корпусе и игнорировать остальные.

person elyase    schedule 22.02.2017
comment
Спасибо @elyase, это помогает. Таким образом, использование LSA (SVD) приведет к лучшим кластерам по сравнению с простым использованием max_features=10 в TFIDF. LSA (SVD) похож на PCA или как мне это понять? Какая связь между LSA и PCA? - person Niko Nelissen; 22.02.2017
comment
Я думаю, вы можете найти ответ здесь stats.stackexchange .com/questions/65699/. Это немного отличается, когда вы делаете уменьшение размерности. PCA вычисляет ковариационную матрицу вашего входного массива. Для SVD (или LSA) он использует scipy, чтобы сразу вычислить матрицу разложения (X = U * S * VT). В частности, для scikit-learn вы не можете передать разреженную матрицу в модель PCA, поэтому, если у вас есть матрица tf-idf, использование SVD может быть лучшим выбором. - person titipata; 22.02.2017

LSA преобразует пространство признаков набора слов в новое пространство признаков (с ортонормальным набором базисных векторов), где каждое измерение представляет собой скрытое понятие (представленное как линейная комбинация слов в исходном измерении).

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

Следовательно, уменьшение размерности в преобразованном пространстве признаков LSA, вероятно, будет намного более эффективным, чем в исходном пространстве признаков BOW tf-idf (которое просто отсекает менее частые/неважные слова), тем самым приводя к более качественным данным после уменьшения размерности и может улучшить качество кластеров.

Кроме того, уменьшение размерности помогает бороться с проблемой проклятия размерности (например, возникающей при вычислении расстояния в k-средних).

person Sandipan Dey    schedule 22.02.2017