【发布时间】:2019-11-12 09:35:30
【问题描述】:
所以我有以下代码,我在进行降维后进行 kmeans 聚类。
# Create CountVectorizer
vec = CountVectorizer(token_pattern=r'[a-z-]+',
ngram_range=(1,1), min_df = 2, max_df = .8,
stop_words=ENGLISH_STOP_WORDS)
cv = vec.fit_transform(X)
print('Dimensions: ', cv.shape)
# Create LSA/TruncatedSVD with full dimensions
cv_lsa = TruncatedSVD(n_components=cv.shape[1]-1)
cv_lsa_data = cv_lsa.fit_transform(cv)
# Find dimensions with 80% variance explained
number = np.searchsorted(cv_lsa.explained_variance_ratio_.cumsum(), .8) + 1
print('Dimensions with 80% variance explained: ',number)
# Create LSA/TruncatedSVD with 80% variance explained
cv_lsa80 = TruncatedSVD(n_components=number)
cv_lsa_data80 = cv_lsa80.fit_transform(cv)
# Do Kmeans when k=4
kmean = KMeans(n_clusters=4)
clustered = km.fit(cv_lsa_data80)
现在我不知道下一步该做什么。我想获得由 kmeans 对象识别的集群,并获得这些集群中前 10 个/最常用的词。比如:
集群 1:
第一个最常见的词 - 计数
第二个最常见的单词 - 计数
第 2 组:
第一个最常见的词 - 计数
第二个最常见的单词 - 计数
【问题讨论】:
-
听起来您已经使用该模型进行了构建、拟合和预测。现在我要做的是添加到您的数据框 cv 3 列 ["count_1"]、["count_2"]、["labels"]。标签很容易获得,只需为其他人做 cv['labels'] = km.predict(cv_lsa_data80) 是当您可以执行逻辑将短语中的所有单词用空格分开时,例如 string = cv[ i].split(" ") 然后您可以使用相同的逻辑返回前 2 个频繁出现的单词。一旦你得到了所有这些变量,你就可以隔离“指南”。你在正确的轨道上。
标签: python scikit-learn k-means dimensionality-reduction