5.5.5 LOOCV 교차 검증
교차 검증을 극단적으로 사용하면, 사례 개수만큼 많은 버킷으로 교차 검증을 할 수 있다고 이야기했습니다. 사례가 20개라면 훈련-테스트 분리를 20번 하고, 모델을 20번 적합하고, 20번 테스트하며, 20개의 평가 결과를 얻습니다. 이러한 방식의 교차 검증을 Leave-One-Out CV(LOOCV)라고 합니다. 이 방식을 이용하면 우리가 만드는 모델들이 거의 비슷한 학습 데이터를 사용하여 학습하게 됩니다. 흥미롭지요? 20개의 사례로 LOOCV를 실행하면 두 개의 모델이 사용하는 학습 데이터의 90%가 겹칩니다. 궁금하면 그림 5-7로 돌아가 보세요.
In [32]:
linreg = linear_model.LinearRegression() diabetes = datasets.load_diabetes() loo = skms.LeaveOneOut() scores = skms.cross_val_score(linreg, diabetes.data, diabetes.target, cv=loo, scoring='neg_mean_squared_error') scores = pd.Series(np.sqrt(-scores)) df = pd.DataFrame({'RMSE':scores}) df.index.name = 'Repeat' display(df.describe().T) ax = sns.swarmplot(y='RMSE', data=df) ax.set_xlabel('Over LOO\nTrain-Test Splits');
count |
mean |
std |
min |
25% |
50% |
75% |
max |
|
RMSE |
442.000 |
44.356 |
32.197 |
0.208 |
18.482 |
39.547 |
63.973 |
158.236 |