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

时间:2018-11-19 23:41:05

标签: python naivebayes

我正在尝试使用GaussianNB预测一门课,但是我需要获得排名前三的预测课才能为该预测创建自定义分数。

我的训练数据是x,y,class,给定x和y则需要预测该课程

测试变量包含(x,y)值,而testclass包含类值。

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个预测类?

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

1 个答案:

答案 0 :(得分:1)

如评论中所述,ff具有[n_samples, n_classes]。使用numpy.argsort,您将为每一行获得按其概率升序排列的预测类,从而再次获得形状为[n_samples, n_classes]的矩阵。然后,您获取所有行的最后三个元素([:, -3:])并颠倒它们的顺序([:, ::-1]),以首先获得具有最高概率的类:

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

请注意,切片中的[:,仅表示“获取所有行”。