У меня есть этот фрейм данных (text_df):
![enter image description here](https://i.stack.imgur.com/CiiQW.png)
Есть 10 разных авторов с 13834 строками текста.
Затем я создал пакет слов и использовал TfidfVectorizer примерно так:
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_v = TfidfVectorizer(max_df=0.5,
max_features=13000,
min_df=5,
stop_words='english',
use_idf=True,
norm=u'l2',
smooth_idf=True
)
X = tfidf_v.fit_transform(corpus).toarray() # corpus --> bagofwords
y = text_df.iloc[:,1].values
Форма Х (13834,2701)
Я решил использовать 7 кластеров для KMeans:
from sklearn.cluster import KMeans
km = KMeans(n_clusters=7,random_state=42)
Я хотел бы извлечь авторов текстов в каждом кластере, чтобы увидеть, последовательно ли сгруппированы авторы в один кластер. Не уверен насчет лучшего способа сделать это. Спасибо!
Обновление:
Попытка визуализировать количество авторов на кластер, используя вложенный словарь, например:
author_cluster = {}
for i in range(len(y_kmeans)):
# check 20 random predictions
j = np.random.randint(0, 13833, 1)[0]
if y_kmeans[j] not in author_cluster:
author_cluster[y_kmeans[j]] = {}
if y[j] not in author_cluster[y_kmeans[j]]:
author_cluster[y_kmeans[j]][y[j]] = 1
else:
author_cluster[y_kmeans[j]][y[j]] += 1
Выход:
![enter image description here](https://i.stack.imgur.com/9ESYP.png)
Должно быть большее число на кластер и, возможно, более одного автора на кластер. Я хотел бы использовать все прогнозы, чтобы получить более точный счет вместо использования подмножества. Но открыты для альтернативных решений.