我运行了一个python程序,它调用sklearn.metrics的方法来计算精度和F1分数。
/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
'precision', 'predicted', average, wa
很抱歉所有的文字,但我认为这个项目的背景可能会有所帮助:
我一直在做一个二进制分类项目。原始数据集由大约28,000个类0和650个类1组成,因此它是非常不平衡的。我得到了一个欠采样和过采样的数据集,每个类有5000个(第一类实例被简单地复制了9次)。在对此进行模型训练并获得低于平均水平的结果(AUC值约为.85,但需要更好)后,我开始怀疑这些采样技术是否真的是一个好主意,因此我再次取出了原始的高度不平衡的数据集。我把它直接插入到一个默认的GradientBoostClassifier中,在80%的数据上训练它,我立即得到了类似这样的东西:
Accuracy:
0.997367035282
A
sklearn函数中计算的平均精度分数遵循下图所示的公式。
AP = Σ(Rn - Rn-1)Pn *The index value of the sumation is n. Please refer to the attached image for a clear version of the formula
我正在努力完全理解这个函数背后的数学原理。我特别好奇公式中的第n个阈值是如何计算的。阈值的数量是否等于样本的数量?
我想考10个班的ROC。我使用了CNN模型(keras)。我可以得到一条vs rest曲线,但我想要一对一。以下是我的代码片段。 model.compile(optimizer=keras.optimizers.Adam(0.001),
loss='categorical_crossentropy',
metrics=['acc'])
from keras.callbacks import History
history = History()
model.fit_generator(generator=tr
我知道Recall= TP/ (TP+FN)
假设我考虑分类器的不同上下文的召回值。在一个上下文中,我将classA作为我的积极类,将classB作为我的负面类。在另一个上下文中,我将classA作为我的负面类,将classB作为我的正面类。
在这些上下文中,让R1和R2值成为回调值
R1=TP1/(TP1+FN1)
R2=TP2/(TP2+FN2)
But TP2=FN1 and FN2=TP1
So R2=FN1/(TP1+FN1)
So R1+R2=1
这个论点有什么问题吗?我觉得有问题,因为我看到分类器正在使用recall进行评估。
同样,如果我被要求计算分类器的召回率,它是R1还是R