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 ์ธ์์๋ ์ค์ ๊ฐ์ ์ฃผ์ด ์ฑ๋ฅ์ ๋ํ ์์ฝ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
'Programming > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ๋ณธ ํจ์ ์ฌ์ฉ๋ฒ (0) | 2020.10.24 |
---|---|
dplyr ์ฌ์ฉ๋ฒ (0) | 2020.10.22 |
๊ฒฐ์ธก์น ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.21 |
CSV ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ (0) | 2020.10.21 |
๋ฌธ์์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.20 |