2014-01-23 22 views
1

假設我有分類決策和置信度作爲記錄,有什麼辦法通過SQL獲得精度/回調曲線嗎?換句話說,是否有辦法將以下一組查詢合併爲一個?SQL中的計算精度/回調曲線

select avg(predicted_label=correct_label) from t where confidence<0 
select avg(predicted_label=correct_label) from t where confidence<1 
select avg(predicted_label=correct_label) from t where confidence<2 
select avg(predicted_label=correct_label) from t where confidence<3 
select avg(predicted_label=correct_label) from t where confidence<4 
select avg(predicted_label=correct_label) from t where confidence<5 
select avg(predicted_label=correct_label) from t where confidence<6 
.... 

回答

1

要獲得predicted_labelavg的信任範圍的嘗試。
編輯:做了加入上<=

SELECT FLOOR(t1.confidence), AVG(t2.predicted_label) 
FROM Table t1 
    JOIN Table t2 ON t2.confidence <= t1.Confidence 
GROUP BY FLOOR(t1.confidence) 
+0

有趣的是,還沒有結束「加入一個<= b」的語法,哪些引擎支持? –

+0

@YaroslavBulatov AFAIK所有數據庫引擎都支持這種連接。確保比較列索引以獲得更好的性能。這是[Oracle](http://docs.oracle.com/cd/B25016_08/doc/dl/bi/B13916_04/joins.htm#i1014451)參考。另外[this](http://stackoverflow.com/questions/7870155/difference-between-a-theta-join-equijoin-and-natural-join)可能會有所幫助。 – user2989408

+0

我明白了。它似乎不在Google Cloud SQL中(尚未) –

0

如果你有一個表(姑且稱之爲numbers單柱num)從0含有相關數字的一些足夠大的數,那麼你可以簡單地說:

select avg(t.predicted_label=t.correct_label) 
    from t join numbers on t.confidence < numbers.num 
where numbers.num < 100 -- or whatever makes sense 
group by numbers.num