K를 선택하면 왜 교차 검증 점수가 낮아 집니까?


11

주변에 재생 보스톤 주택 데이터 집합RandomForestRegressor에 (w / 기본 매개 변수) 나는 이상한 뭔가를 발견, scikit 배우기 : 평균 교차 유효성 검사 점수가 감소 내가 내 교차 검증 전략 등이었다 다음 10 이상으로 주름의 수를 증가로 :

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... num_cvs다양한 곳 . k-fold CV의 train / test split size 동작을 반영하도록 설정 test_size했습니다 1/num_cvs. 기본적으로 k-fold CV와 같은 것을 원했지만 무작위성이 필요했습니다 (따라서 ShuffleSplit).

이 시행을 여러 번 반복 한 다음 평균 점수와 표준 편차를 플로팅했습니다.

K- 폴드 교차 검증에서 원의 영역 ~ K

크기 k는 원의 영역으로 표시되며 표준 편차는 Y 축에 있습니다.

꾸준히 증가 시키면 k(2에서 44로) 점수가 잠깐 증가한 다음, 계속해서 k(10 배 이상) 꾸준히 감소합니다 ! 어쨌든 더 많은 훈련 데이터로 인해 점수 가 약간 증가 할 것으로 기대합니다 !

최신 정보

절대 오차의미 하도록 채점 기준을 변경하면 예상되는 동작이 나타납니다. 채점은 0에 접근하지 않고 K- 폴드 CV에서 폴드 수가 증가할수록 향상됩니다 (기본값은 ' r2 '와 동일). 기본 점수 측정 항목이 평균 및 STD 측정 항목 에서 폴드 수가 증가함에 따라 성능이 저하되는 이유는 여전히 남아 있습니다.


당신의 주름에 중복 기록이 있습니까? 과적 합 때문일 수 있습니다 .
Quit--Anony-Mousse를 가지고 있습니다.

1
@ Anony-Mousse 아니요. Boston Housing 데이터 셋에 중복 레코드가없고 ShuffleSplit의 샘플링으로 인해 중복 레코드가 발생하지 않기 때문입니다.
Brian Bien

4
또한 플로팅을 개선하십시오. 평균, + -stddev 및 최소 / 최대를 표시하려면 오류 막대를 사용하십시오. 다른 축에 k를 입력하십시오.
종료 : 익명 -Mousse

1
더 많은 훈련 사례가 과적 합의 가능성을 증가 시킨다고 생각하지 않습니다. ShuffleSplit (다양한 테스트 크기의 n_splits = 300)을 사용하여이 데이터 세트를 사용하여 학습 곡선을 플로팅하고 더 많은 교육 예제를 사용할 수 있으므로 정확도가 지속적으로 향상되었습니다.
Brian Bien

1
죄송합니다. 맞습니다. 더 좋을수록 좋습니다. 1은 평균 제곱 또는 절대 오차를 사용하면이 문제가 없습니다. 이 오류 용어로 뭔가를 가지고 그래서
rep_ho

답변:


1

r ^ 2 점수는 단일 샘플에 적용될 때 정의되지 않습니다 (예 : leave-one-out CV).

r ^ 2는 소규모 테스트 세트를 평가하는 데 좋지 않습니다. 충분히 작은 테스트 세트를 평가하는 데 사용될 경우, 좋은 예측에도 불구하고 점수는 마이너스로 떨어질 수 있습니다.

단일 샘플이 주어지면 주어진 도메인에 대한 좋은 예측은 끔찍한 것처럼 보일 수 있습니다.

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

테스트 집합의 크기를 늘리고 (예측 정확도를 동일하게 유지) 갑자기 r ^ 2 점수가 거의 완벽하게 나타납니다.

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

테스트 크기가 2 샘플이고 우연히 서로 가까운 2 샘플을 평가하는 경우 다른 극단적으로 취하면 예측이 매우 우수하더라도 r ^ 2 점수에 상당한 영향을 미칩니다. :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.