我正在尝试使用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
答案 0 :(得分:1)
如评论中所述,ff
具有[n_samples, n_classes]
。使用numpy.argsort,您将为每一行获得按其概率升序排列的预测类,从而再次获得形状为[n_samples, n_classes]
的矩阵。然后,您获取所有行的最后三个元素([:, -3:]
)并颠倒它们的顺序([:, ::-1]
),以首先获得具有最高概率的类:
np.argsort(ff)[:, -3:][:, ::-1]
请注意,切片中的[:,
仅表示“获取所有行”。