결과의 일반화 성능비교를 위해 훈련데이터와 테스트데이터로 구분하는 것은 머신러닝/딥러닝의 기본적인 과정임
훈련데이터를 여러 개로 나눌 것인가(교차검증), 훈련/테스트 데이터 외에 별도의 검증데이터로 더 일반화 가능성을 탐색할 것인가 세분화됨
교차검증이 필요한 이유
데이터는 label이 있는 train, test set으로 구성되어 있다.
만약 ‘train set을 다시 train set + validation set으로 분리하지 않는다’라고 가정하면, 우리는 모델 검증을 위해서 test set을 사용하여야 할 것이다. 사실상 test set이 아닌 valdiation set인 셈인데, 여기에 한 가지 약점이 존재한다. 고정된 test set을 가지고 모델의 성능을 확인하고 파라미터를 수정하고, 이 과정을 반복하면 결국 내가 만든 모델은 test set에만 잘 동작하는 모델이 된다. 이 경우에는 test set에 과적합(overfitting)되어 다른 실제 데이터를 가지고 예측을 수행하면 엉망인 결과가 나와버리게 된다.
이렇듯 고정된 train set과 test set으로 평가를 하고, 반복적으로 모델을 튜닝하다보면 test set에만 과적합되어버리는 결과가 생긴다. 이를 해결하고자 하는 것이 바로 교차 검증(cross validation)이다.
그렇다면 교차 검증은 어떻게 이 문제를 해결할까?
‘test set에 과적합 되는 문제’는 test set이 데이터 중 일부분으로 고정되어 있고, 이 일부분의 데이터 셋에 대하여 성능이 잘 나오도록 파라미터를 반복적으로 튜닝하기 때문에 발생한다. 교차 검증은 데이터의 모든 부분을 사용하여 모델을 검증하고, test set을 하나로 고정하지 않는다.
Warning message:
"package 'caret' was built under R version 3.6.3"Loading required package: lattice
Loading required package: ggplot2
Warning message:
"package 'dplyr' was built under R version 3.6.3"
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Warning message in knn(train, train, train$vote, k = 3):
"강제형변환에 의해 생성된 NA 입니다"Warning message in knn(train, train, train$vote, k = 3):
"강제형변환에 의해 생성된 NA 입니다"
Error in knn(train, train, train$vote, k = 3): 외부 함수 호출시 NA/NaN/Inf가 있습니다 (인자 6)
Traceback:
1. knn(train, train, train$vote, k = 3)
There is a binary version available but the source version is later:
binary source needs_compilation
e1071 1.7-6 1.7-9 TRUE
Binaries will be installed
package 'e1071' successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\MyCom\AppData\Local\Temp\Rtmpu8TzE8\downloaded_packages
Warning message:
"package 'e1071' was built under R version 3.6.3"Warning message in train.default(x, y, weights = w, ...):
"You are trying to do regression and your outcome only has two possible values Are you trying to do classification? If so, use a 2 level factor as your outcome column."
k-Nearest Neighbors
148 samples
13 predictor
No pre-processing
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 99, 99, 98
Resampling results across tuning parameters:
k RMSE Rsquared MAE
5 0.5166099 0.018137211 0.4443855
7 0.4936560 0.008263628 0.4311905
9 0.4745004 0.020980181 0.4147937
RMSE was used to select the optimal model using the smallest value.
The final value used for the model was k = 9.
RMSE 대신 Accuracy가 나와야 한다. 해결방안 -> vote 컬럼데이터를 factor 해줘야함
k-Nearest Neighbors
148 samples
13 predictor
2 classes: 'no', 'yes'
No pre-processing
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 99, 99, 98
Resampling results across tuning parameters:
k Accuracy Kappa
5 0.6282993 0.05194936
7 0.6619048 0.10466503
9 0.6959184 0.15192018
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was k = 9.
k = 9 일때 가장 좋은 정확도를 보였다.
1
2
plot(model)
훈련데이터 결과
1
2
print(model)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
k-Nearest Neighbors
148 samples
13 predictor
2 classes: 'no', 'yes'
No pre-processing
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 99, 99, 98
Resampling results across tuning parameters:
k Accuracy Kappa
5 0.6282993 0.05194936
7 0.6619048 0.10466503
9 0.6959184 0.15192018
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was k = 9.
k-Nearest Neighbors
148 samples
13 predictor
2 classes: 'no', 'yes'
No pre-processing
Resampling: Cross-Validated (3 fold, repeated 10 times)
Summary of sample sizes: 99, 99, 98, 99, 99, 98, ...
Resampling results across tuning parameters:
k Accuracy Kappa
5 0.6574150 0.1171199
7 0.6710476 0.1155950
9 0.6886395 0.1165854
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was k = 9.
Leave a comment