Programming/R

caret 사용법

🌻Pep🌻 2020. 10. 22. 19:40

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 인자에는 실제 값을 주어 성능에 대한 요약된 결과를 확인할 수 있다.