當我從下面這個Scikit使用教程K均值文本聚類學習K-手段之前使用LSA: http://scikit-learn.org/stable/auto_examples/text/document_clustering.html爲什麼做文本聚類
在這個例子中,可選LSA(使用SVD)用於執行降維。
爲什麼這很有用?使用「max_features」參數可以在TF-IDF矢量化器中控制尺寸(特徵)的數量。
我知道LSA(和LDA)也是話題建模技術。與集羣的區別在於文檔屬於多個主題,但僅限於一個集羣。我不明白爲什麼在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)
感謝@elyase,這有助於。因此,與簡單地在TFIDF中使用max_features = 10相比,使用LSA(SVD)將導致更好的羣集。 LSA(SVD)與PCA類似嗎?我應該怎麼看? LSA和PCA之間的關係是什麼? –
我想你可以在這裏找到答案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