2017-02-22 48 views
2

Я после этого урока из Scikit узнать на текстовой кластеризации с помощью K-Means: http://scikit-learn.org/stable/auto_examples/text/document_clustering.htmlЗачем использовать НУА, прежде чем K-средства при выполнении наслоение текста

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

Почему это полезно? Число измерений (функций) уже можно контролировать в TF-IDF-векторе, используя параметр «max_features».

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

Пример кода:

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) 

ответ

3

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

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

+0

Спасибо @elyase, это помогает. Поэтому использование LSA (SVD) приведет к улучшению кластеров по сравнению с простым использованием max_features = 10 в TFIDF. Является ли LSA (SVD) похожим на PCA или как я должен это видеть? Какова связь между LSA и PCA? –

+0

Я думаю, вы можете найти ответ здесь http://stats.stackexchange.com/questions/65699/lsa-vs-pca-document-clustering. Это немного отличается, когда вы уменьшаете размерность. PCA вычисляет матрицу ковариации вашего входного массива. Для SVD (или LSA) он использует scipy для вычисления матрицы разложения сразу (X = U * S * V.T). Для scikit-learn специально вы не можете использовать разреженную матрицу для модели PCA, поэтому, если у вас есть tf-idf-матрица, использование SVD может быть лучшим выбором. – titipata

2

LSA преобразует пространственное пространство пространства слов в новое пространственное пространство (с орто-нормальным набором базовых векторов), где каждое измерение представляет собой скрытую концепцию (представленную как линейную комбинацию слов в исходном измерении) , Как и в случае с PCA, несколько верхних собственных векторов обычно захватывают большую часть дисперсии в преобразованном пространстве объектов, а другие собственные векторы в основном представляют шум в наборе данных, следовательно, верхние собственные векторы в пространственном пространстве LSA могут считаться вероятными для захвата большинства понятий, определяемых словами в исходном пространстве. Следовательно, уменьшение размерности в пространственном пространстве с расширенным пространством LSA, вероятно, будет намного более эффективным, чем в исходном пространстве объектов (которое просто отбивает менее частые/важные слова), что приводит к более качественным данным после уменьшения размерности и вероятно, улучшит качество кластеров.