5.7.1 학습 곡선: 데이터는 얼마나 많이 필요할까?
학습 시스템에 관한 가장 간단한 질문 중 하나는 학습 사례를 더 많이 사용하는 것이 학습 성능에 어떤 영향을 주는가 하는 것입니다. 수많은 데이터를 사용하더라도 모델이 좋은 성능을 보이지 않는다면 뭔가 잘못된 목표를 쫓고 있는 것일지도 모릅니다. 또 다른 관점에서 보면, 훈련 데이터를 더 많이 혹은 전부 사용하면 성능을 지속적으로 개선시키게 됩니다. 데이터를 더 모으는 것은 노력을 수반하지만, 성능이 개선된다면 노력을 투자할 만하지요. 어쨌든 다음 코드부터 시작해 봅시다. sklearn은 계산에 필요한 learning_curve 함수를 제공합니다.
In [33]:
iris = datasets.load_iris() # 열 가지 데이터 세트 크기: 10~100% # 5-폴드 CV로 데이터를 처리합니다 train_sizes = np.linspace(.1, 1.0, 10) nn = neighbors.KNeighborsClassifier() (train_N, train_scores, test_scores) = skms.learning_curve(nn, iris.data, iris.target, cv=5, train_sizes=train_sizes) # 각 데이터 세트 사이즈별로 다섯 개의 CV 점수를 산출합니다 # collapse across the 5 CV scores; one result for each data set size df = pd.DataFrame(test_scores, index=(train_sizes*100).astype(np.int)) df['Mean 5-CV'] = df.mean(axis='columns') df.index.name = "% Data Used" display(df)
% Data Used |
0 |
1 |
2 |
3 |
4 |
Mean 5-CV |
10 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
20 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
30 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
0.3333 |
40 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
50 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
60 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
0.6667 |
70 |
0.9000 |
0.8000 |
0.8333 |
0.8667 |
0.8000 |
0.8400 |
80 |
0.9667 |
0.9333 |
0.9000 |
0.9000 |
0.9667 |
0.9333 |
90 |
0.9667 |
1.0000 |
0.9000 |
0.9667 |
1.0000 |
0.9667 |
100 |
0.9667 |
1.0000 |
0.9333 |
0.9667 |
1.0000 |
0.9733 |