[英]ORACLE PL/SQL PIVOT procedure
我試圖編寫一個Oracle PL / SQL過程來計算一個簡單的混淆矩陣表。 我已經准備好標簽數據,基本上是兩列0和1,實際值與預測值。
我能夠用簡單的樞軸來計算它(我認為是最簡單的選擇):
SELECT * FROM
( SELECT ACTUAL_VALUE, PREDICTED_VALUE
FROM MY_TABLE
)
PIVOT (
COUNT(PREDICTED_VALUE)
FOR PREDICTED_VALUE IN (1, 0))
ORDER BY ACTUAL_VALUE;
現在,我試圖將所有這些“插入” DECLARE,BEGIN ...框架,但沒有成功。 甚至可以創建程序來計算此樞軸嗎?
預先感謝您的任何建議!
我不得不使用游標和循環。 並使我的計算以此方式進行。 因此,關閉這一步驟。最后再加上3個匯總計算。 謝謝
CREATE OR REPLACE PROCEDURE "mydb"."C_MATRIX"
IS
CURSOR MY_DATA IS
SELECT ACTUAL_CARD, PREDICTED_VALUE FROM my_table;
my_data_rec my_data%rowtype;
fp pls_integer := 0;
tp pls_integer := 0;
fn pls_integer := 0;
tn pls_integer := 0;
BEGIN
OPEN my_data;
LOOP
FETCH my_data INTO my_data_rec;
EXIT WHEN my_data%notfound;
IF my_data_rec.ACTUAL_CARD = 0 and my_data_rec.PREDICTED_VALUE = 0 then
tn := tn + 1;
elsif my_data_rec.ACTUAL_CARD = 0 and my_data_rec.PREDICTED_VALUE = 1 then
fn := fn + 1;
elsif my_data_rec.ACTUAL_CARD = 1 and my_data_rec.PREDICTED_VALUE = 1 then
tp := tp + 1;
elsif my_data_rec.ACTUAL_CARD = 1 and my_data_rec.PREDICTED_VALUE = 0 then
fp := fp + 1;
end if;
END LOOP;
dbms_output.put_line
('Number of false Positives: ' ||fp || ' Number of true Positives: ' ||tp || ' Total numbers of records: ' ||(fp + tp) );
dbms_output.put_line
('Number of false Negatives: ' ||fn || ' Number of true Negatives: ' ||tn || ' Total numbers of records: ' ||(fn + tn ));
dbms_output.put_line(' ');
dbms_output.put_line
(' Incorrect predictions: ' || (fp + fn) || ' Correct predictions: ' || (tp + tn) );
dbms_output.put_line(' ');
dbms_output.put_line(' Acurracy: ' || round((((tn + tp) / (tn + tp + fn + fp)) * 100),2) || '%');
dbms_output.put_line(' Precision: ' || round(((tp / (tp + fp)) * 100),2) || '%');
dbms_output.put_line(' Recall: ' || round(((tp / (tp + fn)) * 100),2) || '%');
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.