我在python中使用scikit-learn来完成我的主题分类程序。 Scikit指标打印文档在类中的最高概率。但是,我想知道的是当我向分类器提供输入文档X时,分类器将生成不同主题的向量。
生成的向量中的每个值都表示它属于某个主题的概率。 然后,文档X将被分类为对应于最高概率的主题Y(在88个值中)。 我没有采用最高概率并将相应的主题分配给文档X,而是想知道具有最高概率的前5个主题。我怎么能这样做。
model = LogisticRegression()
model = model.fit(matrix, label)
y_train_pred = model1.predict(matrix_test)
答案 0 :(得分:2)
总体思路:
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)。