从 GaussianNB 分类器 python 中获得前 3 个预测 类

Get Top 3 predicted classes from GaussianNB classifier python

我正在尝试使用 GaussianNB 预测 class,但我需要获得前 3 个预测 classes 才能为预测创建自定义分数。

我的训练数据是 x,y,class 其中给定 x 和 y 它需要预测 class

tests 变量包含 (x,y) 值并且 testclass 包含 class 个值。

Test is a list data set in following format
Index Type Size Value
0 tuple 2 (0.6424, 0.8325)
1 tuple 2 (0.8493, 0.7848) 
2 tuple 2 (0.791, 0.4191)

Test class data 
Index Type Size Value
0 str 1 1.274e+09
1 str 1 9.5047e+09

代码:

import csv
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import GaussianNB


clf_pf = GaussianNB()
clf_pf.fit(train, trainclass)
print clf_pf.score(test,testclass)

ff = clf_pf.predict_proba(test) 

如何从上面的变量 ff 中得到前 3 个预测的 classes?

My ff data is like below
    0           1      2         3    4             5    6   7    8
0 1.80791e-05   0   0.00126251  0   6.38504e-256    0   0   0   0   
1 2.89477e-199  1.01093e-06 0   1.1056e-55  0   5.52213e-67 0   0
2 2.47755e-05   0   2.43499e-08 0   1.00392e-239    0   0   0   0
3 2.54941e-161  3.79815e-06 0   1.53516e-40 0   1.63465e-41 0   0

正如评论中所说,ff[n_samples, n_classes]。使用 numpy.argsort,对于每一行,您将获得按概率升序排列的预测 classes,再次获得形状为 [n_samples, n_classes] 的矩阵。然后,您取所有行的最后三个元素 ([:, -3:]) 并反转它们的顺序 ([:, ::-1]) 以首先获得具有最佳概率的 class:

np.argsort(ff)[:, -3:][:, ::-1]

注意切片中的 [:, 仅表示 "get all the rows"。