因此,我有以下代码,在进行降维后,在其中进行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:
第一个最常见的单词-计数
第二个最常用的单词-计数
答案 0 :(得分:1)
如果您正在寻找群集中心的重要性,scikit-learn docs on kmeans表示形状为cluster_centers_
的变量[n_clusters, n_features]
可以为您提供帮助。
km.fit(...)
cluster_centers = km.cluster_centers_
first_cluster = cluster_centers[0] # Cluster 1
但是作为补充,我认为您不能直接获得计数,因为您对数据集执行了带有SVD的LSA,这意味着您不仅拥有原始计数。您必须从数量上找出kmeans中最重要的SVD元素,然后找出组成单词的单词才能得到您的单词。您可以使用SVD类下的变量components_
来完成此操作。