5

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)
4

2 に答える 2

6

LSAbag-of-words 特徴空間を新しい特徴空間 (基底ベクトルの正規直交セットを使用) に変換します。ここで、各次元は潜在概念 (元の次元の単語の線形結合として表されます) を表します。

と同様にPCA、いくつかの上位固有ベクトルは一般に、変換された特徴空間の分散の大部分を捉え、他の固有ベクトルは主にデータセットのノイズを表します。したがって、LSA 特徴空間の上位固有ベクトルは、元の空間の単語によって定義された概念。

したがって、変換された LSA 特徴空間での次元の削減は、元の特徴空間よりもはるかに効果的である可能性が高くBOW tf-idf(頻度の低い / 重要でない単語を切り捨てるだけです)、次元削減後のデータの品質が向上し、クラスタの品質を向上させます。

さらに、次元削減は、次元の問題の呪い (たとえば、k-means での距離計算中に発生する問題) と戦うのに役立ちます。

于 2017-02-22T18:22:49.417 に答える