我想找到将输入集POINTCOUNT
剪切成同样大的组的ADS.PREDICTOR
值。参数POINTCOUNT
对于不同的预测变量可以具有不同的值,因此我不想在代码中对其进行硬编码。
不幸的是,下面的代码失败了ORA-30496: Argument should be a constant
...我怎样才能克服这个问题(当然,除了300行带有硬编码阈值分位数的代码外)?
define POINTCOUNT=300;
select
*
from (
select
percentile_disc(MYQUNTILE)
within group (
order by PREDICTOR ) as THRESHOLD
from ADS
inner join (
select (LEVEL - 1)/(&POINTCOUNT-1) as MYQUANTILE
from dual
connect by LEVEL <= &POINTCOUNT
)
on 1=1
)
group by THRESHOLD
我想画一条ROC曲线。该曲线将在Excel中绘制为在Oracle中计算的点对(X,Y)之间的线性插值。
使用阈值计算每个点(X,Y)。
如果每对相邻的(X,Y)之间的距离是均匀的,那么我将获得给定数量的点对的ROC曲线的最佳近似值。如果我将预测值的域切割成分隔1 / Nth分位数的N值,我应该得到一组相当好的阈值。
答案 0 :(得分:0)
PERCENTILE_CONT()
仅要求每个组中的百分位数值 。您的子查询中没有group by
,因此我认为这可能会解决您的问题:
select MYQUANTILE,
percentile_disc(MYQUANTILE) within group (order by PREDICTOR
) as THRESHOLD
from ADS cross join
(select (LEVEL - 1)/(&POINTCOUNT-1) as MYQUANTILE
from dual
connect by LEVEL <= &POINTCOUNT
)
GROUP BY MYQUANTILE;
另请注意,CROSS JOIN
与INNER JOIN . . . ON 1=1
相同。