python / sklearn - как получить кластеры и имена кластеров после выполнения kmeans - PullRequest
0 голосов
/ 01 июля 2019

Итак, у меня есть следующий код, где я делаю кластеризацию 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-е наиболее распространенное слово - счет
2-е наиболее распространенное слово - счет

Кластер 2:
1-е наиболее распространенное слово - счет
2-е наиболее распространенное слово - количество

1 Ответ

1 голос
/ 01 июля 2019

Если вы ищете важность центра кластера, в документах scikit-learn для kmeans говорится, что существует переменная cluster_centers_ формы [n_clusters, n_features], которая может вам помочь.

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

Но, как дополнение к этому, я не думаю, что вы сможете получить отсчеты напрямую, потому что вы выполнили LSA с SVD в наборе данных, что означает, что у вас не просто необработанные отсчеты. Вы должны выяснить наиболее важные SVD-элементы в kmeans по величине, а затем выяснить, какие слова составляют счет, чтобы получить его. Для этого можно использовать переменную components_ в классе SVD.

...