python/sklearn - 如何在执行 kmeans 后获取集群和集群名称

python/sklearn - how to get clusters and cluster names after doing kmeans

所以我有以下代码,我在进行降维后进行 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:
第 1 个最常见的词 - count
第二个最常见的词 - count

第 2 组:
第 1 个最常见的词 - count
第二个最常见的词 - count

如果您正在寻找聚类中心重要性,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 class 下的变量 components_ 来执行此操作。