进行文本聚类时,为什么要在K-Means之前使用LSA

Nik*_*sen 3 python svd lsa k-means scikit-learn

我正在学习Scikit的本教程,以学习使用K-Means进行文本聚类:http ://scikit-learn.org/stable/auto_examples/text/document_clustering.html

在该示例中,可选地,使用LSA(使用SVD)执行降维。

为什么这有用?尺寸(功能)的数量已经可以使用“ max_features”参数在TF-IDF矢量化器中进行控制。

我知道LSA(和LDA)也是主题建模技术。群集的区别在于文档属于多个主题,但仅属于一个群集。我不明白为什么LSA将在K-Means集群的背景下使用。

示例代码:

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)
Run Code Online (Sandbox Code Playgroud)

San*_*Dey 6

LSA将词袋特征空间转换为新的特征空间(具有正交基向量集),其中每个维度表示一个潜在概念(表示为原始维度中单词的线性组合)。

PCA,一些顶级特征向量通常捕获变换后的特征空间中的大部分方差,而其他特征向量主要表示数据集中的噪声,因此,LSA 特征空间中的顶级特征向量可以被认为可能捕获大部分由原始空间中的单词定义的概念。

因此,变换后的 LSA 特征空间中的降维可能比原始 LSA 特征空间中的降维更有效BOW tf-idf特征空间中的降维更有效(原始特征空间只是砍掉不太频繁/不重要的单词),从而在降维后产生更好质量的数据,并且可能提高集群质量。

此外,降维有助于解决维数灾难问题(例如,在 k 均值中进行距离计算时出现的问题)。


ely*_*ase 5

论文表明PCA特征向量是K-Means的良好初始化器。

max_features参数控制尺寸等效于减少词汇量,这会产生负面影响。例如,如果您设置max_features为10,则该模型将使用语料库中最常见的10个单词,而忽略其余单词。