作者aattsat (Tala)
看板Perl
标题[问题] 关於计算公式
时间Sat Dec 31 01:48:06 2011
最近写到计算的部分
前半段
$acc = 100 * (( $tp + $tn) / ($tp + $tn + $fp + $fn));
$spec = 100 * (( $tn ) / ( $tn + $fp ));
$sens = 100 * (( $tp ) / ( $tp + $fn ));
这三个计算公式都成功了 (即使其中一值为0,最後还是能成功显示)
现在问题来了,我加了下面公式後
$sens = $recall;
$prec = 100 * (( $tp ) / ( $tp + $fp ));
$fmeasure = 2 * ($prec * $recall) / ($prec + $recall);
$mcc = (($tp*$tn)-($fn*$fp))/sqrt(($tp+$fp)*($tp+$fn)*($tn+$fp)*($tn+$fn));
一直说我的$prec 值为0
正常如果真为0其实还是能跑出来的
现在一直卡在为0部分...执行失败
请问我公式内容or写法有错误吗?
mcc部分 开根号那边不确定 = =
麻烦各位大大的帮忙了 谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 113.61.134.176
1F:推 abliou:那你的recall是什麽? 12/31 02:02
$recall=$sens = 100 * (( $tp ) / ( $tp + $fn ));
跑过$sens 没问题
目前是全部计算公式都有
※ 编辑: aattsat 来自: 113.61.134.176 (12/31 02:57)
2F:推 abliou:如果recall=sen 为何不写$recall=$sen? 12/31 08:59
3F:推 sqrt1089:安 ,可以把你的TP FP TN FN 的数字给一下吗? 01/02 16:28
4F:→ sqrt1089:大概看一下如果TP=0的话$sens = $recall = 0 01/02 16:36
5F:→ sqrt1089:$prec = 100 * (( $tp ) / ( $tp + $fp )) = 0; 01/02 16:36
6F:→ sqrt1089:$fmeasure = 2*($prec * $recall) / ($prec + $recall) 01/02 16:37
7F:→ sqrt1089:这样分母为0 就不能算了 01/02 16:37
8F:推 sqrt1089:建议你把Fmeasure = 2 * (p * r) / (p + r) 整个展开 01/02 16:45
9F:→ sqrt1089:我展开後 F = 2TP / (2TP + FN +FP), 这样即使TP=0也可以 01/02 16:45
10F:→ sqrt1089:算 01/02 16:46
多谢!!
※ 编辑: aattsat 来自: 113.61.134.176 (04/18 15:55)