作者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)