0

我正在尝试使用 matlab 计算误报率和误报率。我已经生成了一个带有阈值的 s 曲线(在某个点切割曲线的垂直线)。阈值左侧曲线下的所有值都是假阳性,阈值右侧曲线下的所有值都是假阴性。我必须将曲线下的区域整合为误报和 area_of_rect_to_right_of_threshold -(曲线下到阈值右侧的区域)来计算误报。当我在 matlab 中尝试以下代码时,我遇到了一个奇怪的错误。

    syms p;
    func = (1 - (1 - p^5)^10);
    areaOfRect = (1-threshold)*1; 
    fn = areaOfRect - int(func,p,0,threshold);
    fp = int(func,p,threshold,1);


fn = 2575908626830580620307480425353828014939901186516550645854841225649977931806217173152793134129 ......

fp = 20989145492538166675017041353401970126067731601439729556868060737768716969716535384....

这些输出非常奇特,这让我觉得我没有以正确的方式使用集成功能。任何帮助将非常感激。

4

2 回答 2

3

看起来你只是得到有理形式的精确解a/b,对浮点的评估应该与数值积分相匹配

fn_sym = double(fn)
fn_num = areaOfRect - quadl(@(p)(1 - (1 - p.^5).^10),0.01,threshold)
fp_sym = double(fp)
fp_num = quadl(@(p)(1 - (1 - p.^5).^10),threshold,1.01)
于 2014-03-15T00:32:23.743 回答
0

您的文字描述说:“阈值左侧曲线下的所有值都是误报”,但您的代码计算从您threshold到 1.01 的积分,这是右侧。我无法判断哪个是正确的。

于 2014-03-15T00:50:13.027 回答