从主题模型矩阵中选择前三项

时间:2018-07-28 09:40:21

标签: sorting matrix gensim topic-modeling

我从主题模型获得以下输出,其中各个值代表总共五个主题(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]])

0 个答案:

没有答案