5

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

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

为什么这很有用?维度(特征)的数量已经可以在 TF-IDF 矢量化器中使用“max_features”参数进行控制。

我知道 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)
4

2 回答 2

6

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

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

因此,变换后的 LSA 特征空间中的降维可能比原始BOW tf-idf特征空间中的降维效果要好得多(它只是简单地去掉了不太常见/不重要的词),从而在降维后得到更好的数据质量,并且可能提高集群质量。

此外,降维有助于解决维数问题(例如,在 k-means 中计算距离时出现的问题)。

于 2017-02-22T18:22:49.417 回答
5

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

用参数控制维度,max_features相当于切断了词汇量的负面影响。例如,如果您设置max_features为 10,模型将使用语料库中最常见的 10 个单词并忽略其余单词。

于 2017-02-22T16:02:47.567 回答