如何在分类模型中打印前5个主题?

时间:2016-02-01 10:09:03

标签: python scikit-learn

我在python中使用scikit-learn来完成我的主题分类程序。 Scikit指标打印文档在类中的最高概率。但是,我想知道的是当我向分类器提供输入文档X时,分类器将生成不同主题的向量。

生成的向量中的每个值都表示它属于某个主题的概率。 然后,文档X将被分类为对应于最高概率的主题Y(在88个值中)。 我没有采用最高概率并将相应的主题分配给文档X,而是想知道具有最高概率的前5个主题。我怎么能这样做。

model = LogisticRegression()
model = model.fit(matrix, label)

y_train_pred = model1.predict(matrix_test)

1 个答案:

答案 0 :(得分:2)

总体思路:

  1. 获取概率(使用log_proba获得更好的数值稳健性)。
  2. 对每个文档的概率(概率矩阵的行)进行排序。
  3. 一旦排序,您将在最后五列中找到前5名。
  4. np.argsort不是实际排序概率,而是为您提供列的顺序。由于每列对应一个主题,因此您可以了解每个文档的主题排名。

    lnprobs = model1.predict_log_proba(matrix_test)
    order = np.argsort(lnprobs, axis=1)
    
    print(order[:, -5:])  # print top 5 topics for each document
    

    修改 让我们分析上面的代码以澄清:

    lnprobs是一个矩阵(二维数组),其中每个值包含文档属于主题的概率的对数。每行对应一个文档,每列对应一个主题。

    现在看看lnprobs的第一行;它可能包含[-0.7, -3.7, -2.1, -5.8, -1.2, -10.9, -7.2]之类的内容。有88个条目,每个主题一个,但为简单起见,我们假设现在只有7个主题。

    如果您想知道最高概率,则必须对它们进行排序。按排序顺序,它们是[-10.9, -7.2, -5.8, -3.7, -2.1, -1.2, -0.7]。现在,我们知道前5个概率是-5.8到-0.7。但是,我们不再知道他们属于哪个主题。

    这是np.argsort发挥作用的地方。它不是简单地对值进行排序,而是告诉我们排序值的来源。我们得到了这个:[5, 6, 3, 1, 2, 4, 0]。信息是第5个vaule具有最低概率(-10.9),第0个值具有最高概率(-0.7)。