Я следую этому руководству от 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)