2017-02-22 42 views
2

當我從下面這個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) 

回答

3

a paper表示該特徵向量的PCA是K均值好初始化。

使用參數max_features控制尺寸等同於切斷具有負面影響的詞彙大小。例如,如果將max_features設置爲10,則該模型將與語料庫中最常見的10個單詞一起使用,並忽略其餘部分。

+0

感謝@elyase,這有助於。因此,與簡單地在TFIDF中使用max_features = 10相比,使用LSA(SVD)將導致更好的羣集。 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特徵空間中的尺寸減小可能比原始特徵空間(其簡單地剔除較不頻繁的/重要的單詞)更有效,從而在降維之後導致更好的質量數據,並且可能會提高集羣的質量。