caret 사용법
caret 패키지를 사용하여 다양한 머신러닝 기법의 적용 방법을 알아보자.
In:
df_iris = iris
str(df_iris)
Out:
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
▷ 실험에 사용할 데이터는 R에 내장되어 있는 Iris 데이터이다.
1. 데이터 나누기
In:
tr_idx = createDataPartition(y = iris$Species, p = 0.7, list = F)
train_iris = df_iris[tr_idx, ]
test_iris = df_iris[-tr_idx, ]
table(train_iris$Species)
Out:
setosa versicolor virginica
35 35 35
▷ createDataPartition 함수를 이용하여 p 인자에 할당된 값의 비율로 인덱스를 추출한다. 이때, y 인자에 할당된 값이 범주형 변수일 경우, 비율을 고려하여 추출하게 된다. 위의 결과는 Species 열의 레이블의 비율에 맞게 추출된 것을 확인할 수 있다.
2. 데이터 학습하기
In:
library(caret)
model_rf = train(Species ~ ., data = train_iris, method = 'rf')
print(model_rf)
Out:
Random Forest
105 samples
4 predictor
3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 105, 105, 105, 105, 105, 105, ...
Resampling results across tuning parameters:
mtry Accuracy Kappa
2 0.9571786 0.9348322
3 0.9585120 0.9368726
4 0.9562244 0.9334105
Accuracy was used to select the optimal model using the
largest value.
The final value used for the model was mtry = 3.
▷ train 함수를 이용하여 머신러닝 모델을 학습할 수 있다. 첫 번째 인자에는 모델에 사용할 목적변수와 설명변수를, data 인자에는 학습할 데이터를, method 인자에는 학습할 모델의 이름을 주어 모델을 학습시킬 수 있다.
▷ 여기(topepo.github.io/caret/train-models-by-tag.html)에서 caret 패키지의 train 함수를 통해 사용할 수 있는 머신러닝 기법에 대한 다양한 정보를 확인할 수 있다.
In:
varImp(model_rf)
Out:
rf variable importance
Overall
Petal.Width 100.0000
Petal.Length 81.6058
Sepal.Width 0.4088
Sepal.Length 0.0000
▷ varImp 함수의 인자로 학습된 모델을 주면, 변수 중요도를 구할 수 있다.
3. 예측 및 성능 평가
In:
pred = predict(object = model_rf, test_iris)
print(pred)
confusionMatrix(data = pred, reference = test_iris$Species)
Out:
[1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[13] setosa setosa setosa versicolor versicolor versicolor versicolor versicolor versicolor virginica versicolor versicolor
[25] virginica versicolor versicolor versicolor versicolor versicolor virginica virginica virginica virginica virginica virginica
[37] virginica versicolor virginica virginica virginica versicolor virginica virginica virginica
Levels: setosa versicolor virginica
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 15 0 0
versicolor 0 13 2
virginica 0 2 13
Overall Statistics
Accuracy : 0.9111
95% CI : (0.7878, 0.9752)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 8.467e-16
Kappa : 0.8667
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.8667 0.8667
Specificity 1.0000 0.9333 0.9333
Pos Pred Value 1.0000 0.8667 0.8667
Neg Pred Value 1.0000 0.9333 0.9333
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.2889 0.2889
Detection Prevalence 0.3333 0.3333 0.3333
Balanced Accuracy 1.0000 0.9000 0.9000
▷ predict 함수를 통해 학습된 모델을 이용한 예측을 수행할 수 있다. object 인자에 학습된 모델을 주고, 두 번째 인자에 예측하고자 하는 데이터를 주면 끝이 난다.
▷ 위의 첫 번째 결과는 예측 결과이다. 두 번째 결과는 confusionMatrix 함수를 이용하여 성능을 평가한 결과이다. data 인자에는 예측 결과를, reference 인자에는 실제 값을 주어 성능에 대한 요약된 결과를 확인할 수 있다.