我正在学习 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)