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

时间:2017-02-22 14:52:40

标签: python scikit-learn k-means svd lsa

我从Scikit学习本教程后使用K-Means学习文本聚类: 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)

2 个答案:

答案 0 :(得分:4)

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

使用max_features参数控制尺寸相当于切断具有负面影响的词汇量大小。例如,如果将max_features设置为10,则模型将使用语料库中最常见的10个单词,而忽略其余单词。

答案 1 :(得分:3)

LSA将词袋特征空间转换为新的特征空间(具有正常法线基础向量集),其中每个维度代表潜在概念(表示为词语的线性组合)原始维度)。与PCA一样,一些顶部特征向量通常捕获变换特征空间中的大部分方差,而其他特征向量主要表示数据集中的噪声,因此,LSA特征空间中的顶部特征向量可以被认为是可能捕获原始空间中的单词定义的大多数概念。因此,转换LSA特征空间中维度的减少可能比原始BOW tf-idf特征空间(简单地删除不太频繁/重要的单词)更有效,从而导致降维后质量数据更好,可能会提高集群的质量。