2014-01-23 2 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를 얻으려면.
편집는 : A는 테이블을 가지고 있다면 당신은 단순히 말할 수있는, 일부 대형 충분한 수의 0에서 관련 숫자를 포함 (의 단일 컬럼 numnumbers를 호출하자) <=

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 모든 db 엔진은 이러한 조인을 지원합니다. 성능 향상을 위해 비교 열의 색인이 생성되었는지 확인하십시오. 다음은 [Oracle] (http://docs.oracle.com/cd/B25016_08/doc/dl/bi/B13916_04/joins.htm#i1014451) 참조입니다. 또한 [이] (http://stackoverflow.com/questions/7870155/difference-between-a-theta-join-equijoin-and-natural-join) 도움이 될 수도 있습니다. – user2989408

+0

알겠습니다. Google Cloud SQL에 표시되지 않습니다 (아직) –

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