为什么在进行文本聚类时先使用 LSA 再使用 K-Means
Why use LSA before K-Means when doing text clustering
我正在学习 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)
a paper 表明 PCA 特征向量是 K-Means 的良好初始化器。
用max_features
参数控制维度相当于切断了词汇量大小,有负面影响。例如,如果您将 max_features
设置为 10,模型将使用语料库中最常见的 10 个词并忽略其余词。
LSA
将词袋特征 space 转换为新特征-space(具有正交正态基向量集),其中每个维度代表一个潜在概念(表示为原始维度中单词的线性组合)。
与PCA
一样,一些top特征向量通常捕获变换特征中的大部分方差space,而其他特征向量主要表示数据集中的噪声,因此,top特征向量LSA 特征space 可以认为很可能捕捉到原文 space.
中单词定义的大部分概念
因此,变换后的 LSA 特征 space 中的降维可能比原始 BOW
tf-idf
特征 space 中的维度更有效(这只是切掉频率较低/不重要的词),从而在降维后产生质量更好的数据,并可能提高集群的质量。
此外,降维有助于解决维数灾难问题(例如,在 k-means 中计算距离时出现的问题)。
我正在学习 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)
a paper 表明 PCA 特征向量是 K-Means 的良好初始化器。
用max_features
参数控制维度相当于切断了词汇量大小,有负面影响。例如,如果您将 max_features
设置为 10,模型将使用语料库中最常见的 10 个词并忽略其余词。
LSA
将词袋特征 space 转换为新特征-space(具有正交正态基向量集),其中每个维度代表一个潜在概念(表示为原始维度中单词的线性组合)。
与PCA
一样,一些top特征向量通常捕获变换特征中的大部分方差space,而其他特征向量主要表示数据集中的噪声,因此,top特征向量LSA 特征space 可以认为很可能捕捉到原文 space.
因此,变换后的 LSA 特征 space 中的降维可能比原始 BOW
tf-idf
特征 space 中的维度更有效(这只是切掉频率较低/不重要的词),从而在降维后产生质量更好的数据,并可能提高集群的质量。
此外,降维有助于解决维数灾难问题(例如,在 k-means 中计算距离时出现的问题)。