【发布时间】:2019-02-03 13:02:17
【问题描述】:
我有这个数据框(text_df):
有 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
X 的形状是 (13834,2701)
我决定为 KMeans 使用 7 个集群:
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
输出:
每个集群应该有更多的计数,并且每个集群可能不止一位作者。我想使用所有预测来获得更准确的计数,而不是使用子集。但对替代解决方案持开放态度。
【问题讨论】:
-
如果有 10 个不同的作者,为什么不是 10 个集群?另外,为什么要为此使用 KMeans?如果您有标记数据,为什么不构建分类器?
-
@Sam H. 这是家庭作业。稍后我将使用分类器,但前半部分需要使用聚类算法。我使用 7 个集群,因为我使用肘部方法来找到最佳集群数。
-
@rahlf23 这种方法有替代方案吗?