K-Means を使用したテキスト クラスタリングに関する Scikit Learn のこのチュートリアルに従っています: http://scikit-learn.org/stable/auto_examples/text/document_clustering.html
この例では、必要に応じて LSA (SVD を使用) を使用して次元削減を実行します。
なぜこれが便利なのですか?次元 (機能) の数は、"max_features" パラメーターを使用して TF-IDF ベクトライザーで既に制御できます。
LSA (および LDA) もトピック モデリング手法であることは理解しています。クラスタリングとの違いは、ドキュメントが複数のトピックに属しているが、1 つのクラスターにしか属していないことです。K-Means クラスタリングのコンテキストで LSA が使用される理由がわかりません。
コード例:
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)