我从主题模型获得以下输出,其中各个值代表总共五个主题(topic0,topic1,topic2,topic3,topic4)的主题负载
docs_unnormalized = np.matrix(lda.transform(X_train)) docs = docs_unnormalized / docs_unnormalized.sum(axis = 1)
matrix([[ 0.05066514, 0.05021466, 0.79817198, 0.05057547, 0.05037275],
[ 0.04637189, 0.04642784, 0.04612386, 0.04656551, 0.8145109 ],
[ 0.04442172, 0.04470515, 0.04553918, 0.04448814, 0.82084581],
...,
[ 0.05661877, 0.05696792, 0.05657702, 0.05662667, 0.77320961],
[ 0.05384215, 0.78605551, 0.05345313, 0.05315901, 0.05349019],
[ 0.0405564 , 0.04074741, 0.83711651, 0.04061772, 0.04096197]])
np.argsort(docs)
matrix([[1, 4, 3, 0, 2],
[2, 0, 1, 3, 4],
[0, 3, 1, 2, 4],
...,
[2, 0, 3, 1, 4],
[3, 2, 4, 0, 1],
[0, 3, 1, 4, 2]])
我认为,这是正确的,矩阵数组的值按升序排序。对于第一行,主题2具有最高的负载,而主题4在其他两个字段中具有最高的负载。
我实际上想要实现的是按照降序将前三个主题编号分配给文档。 docs.argmax(axis=1)
返回正确的结果,但仅返回最高主题。
如果您认为可以用gensim更好地解决此任务,请随时发布相应的代码示例。
更新:解决方案:
np.argsort(docs)[:, :1:-1]
matrix([[2, 0, 3],
[4, 3, 1],
[4, 2, 1],
...,
[4, 1, 3],
[1, 0, 4],
[2, 4, 1]])