想象一个二进制分类问题。假设我在pred_test
中存储了800,000个预测概率。我将cutoff
定义为pred_test
中的任何值,以便大于或等于cutoff
的值被分配值为1且小于cutoff
的值分配的值为0。
sklearn
中是否有一个函数可以为cutoff
中的每个pred_train
返回模型的准确性?我希望看到模型的准确性与每个截止点的函数关系,以便系统地选择一个截止点。
我尝试了以下操作:
_list = []
for cutoff in np.unique(np.sort(pred_test)):
binary_prediction = np.where(pred_test >= cutoff, 1, 0)
_list.append( (cutoff, binary_prediction == y_test).sum() / len(pred_test) )
在这里,y_test
是基础事实(一个数组,其中包含观察到的针对800,000行每一行的结果)。该代码返回一个列表,其中每个值都包含截止值及其相应的准确性得分。
对象pred_test
具有大约600,000个不同的值,所以我要迭代600,000次左右。上面的代码可以正常工作,但是要花很长时间才能完成。有没有更有效的方法可以做到这一点?我敢打赌,sklearn
已经具有执行此操作的功能。
答案 0 :(得分:3)
下面是一些类似的线程来检查它:Getting the maximum accuracy for a binary probabilistic classifier in scikit-learn
scikit-learn中没有内置函数。我认为未执行此操作的原因是您将有机会进行过拟合,基本上可以将火车设置调整为对测试集有风险的基线。