【问题标题】:python/sklearn - how to get clusters and cluster names after doing kmeanspython/sklearn - 如何在执行 kmeans 后获取集群和集群名称
【发布时间】: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


【解决方案1】:

如果您正在寻找聚类中心重要性,scikit-learn docs on kmeans 表示有一个形状为 [n_clusters, n_features] 的变量 cluster_centers_ 可以帮助您。

km.fit(...)
cluster_centers = km.cluster_centers_
first_cluster = cluster_centers[0] # Cluster 1

但作为补充,我认为您无法直接获得计数,因为您在数据集上使用 SVD 执行了 LSA,这意味着您不仅有原始计数。您必须按数量级计算出 kmeans 中最重要的 SVD 元素,然后找出构成计数的单词以得到您的计数。您可以使用 SVD 类下的变量components_ 来执行此操作。

【讨论】:

  • 谢谢!我弄清楚它是如何工作的。我想我对下一步该怎么做感到困惑
猜你喜欢
  • 2019-04-04
  • 2019-01-14
  • 2017-07-28
  • 2019-01-04
  • 2017-06-01
  • 2020-09-08
  • 2019-11-30
  • 2018-02-19
  • 2016-11-09
相关资源
最近更新 更多