작업형 제2 유형 모델 분석이다.
이문제들은 항상 까다로운 것 같다.
1. iris 데이터 세트에서 Species rpart, svm 예측 모형을 만든 후 높은 Accuracy 값을 가지는 모델의 예측값을 csv 파일로 제출하시오.
분석 순서는 데이터 결측치 확인 - 데이터 정규화(표준화) - 모델분석(회귀분석, 변수선택, 앙상블(랜덤포레스트) - 결과출력 순서로 진행하였다.
# 데이터 로드
> data("iris")
> ds <- iris
> str(ds)
'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 ...
> summary(ds)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
> head(ds)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
# 데이터 결측치 확인 한번 더
> sum(!complete.cases(ds))
[1] 0
# rpart 회귀 분석
> library(rpart)
> md_rpart <- rpart(Species~., data=ds)
> md_rpart
n= 150
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)
2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) *
3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000)
6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) *
7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *
> ls(md_rpart)
[1] "call" "control" "cptable" "frame" "functions"
[6] "method" "numresp" "ordered" "parms" "splits"
[11] "terms" "variable.importance" "where" "y"
> md_rpart$cptable
CP nsplit rel error xerror xstd
1 0.50 0 1.00 1.19 0.04959167
2 0.44 1 0.50 0.72 0.06118823
3 0.01 2 0.06 0.07 0.02583280
> tree_pred <- predict(md_rpart, newdata=iris, type="class")
#모델 평가
> library(caret)
> confusionMatrix(tree_pred, iris$Species)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 50 0 0
versicolor 0 49 5
virginica 0 1 45
Overall Statistics
Accuracy : 0.96
95% CI : (0.915, 0.9852)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.94
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.9800 0.9000
Specificity 1.0000 0.9500 0.9900
Pos Pred Value 1.0000 0.9074 0.9783
Neg Pred Value 1.0000 0.9896 0.9519
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.3267 0.3000
Detection Prevalence 0.3333 0.3600 0.3067
Balanced Accuracy 1.0000 0.9650 0.9450
# SVM 모델 평가
> library(e1071)
> md_svm <- svm(Species~., ds)
> svm.pred <- predict(md_svm, iris)
> confusionMatrix(svm.pred, ds$Species)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 50 0 0
versicolor 0 48 2
virginica 0 2 48
Overall Statistics
Accuracy : 0.9733
95% CI : (0.9331, 0.9927)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.96
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.9600 0.9600
Specificity 1.0000 0.9800 0.9800
Pos Pred Value 1.0000 0.9600 0.9600
Neg Pred Value 1.0000 0.9800 0.9800
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.3200 0.3200
Detection Prevalence 0.3333 0.3333 0.3333
Balanced Accuracy 1.0000 0.9700 0.9700
# SVM 모델이 Accuracy 가 높으므로 그것으로 선택
> write.csv(svm.pred, file="file.csv")
# (추가) Randomforest
> library(randomForest)
> md_rf <- randomForest(Species~., ds)
> rf_pred <- predict(md_rf, ds)
> confusionMatrix(rf_pred, ds$Species)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 50 0 0
versicolor 0 50 0
virginica 0 0 50
Overall Statistics
Accuracy : 1
95% CI : (0.9757, 1)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 1
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 1.0000 1.0000
Specificity 1.0000 1.0000 1.0000
Pos Pred Value 1.0000 1.0000 1.0000
Neg Pred Value 1.0000 1.0000 1.0000
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.3333 0.3333
Detection Prevalence 0.3333 0.3333 0.3333
Balanced Accuracy 1.0000 1.0000 1.0000
# 랜덤포레스트 매우 적합한 모델이라고 나온다.
'자기계발 > 자격증' 카테고리의 다른 글
[빅데이터 분석기사] 실기 모의고사 2회 - 2/2 (0) | 2022.06.20 |
---|---|
[빅데이터 분석기사] 실기 모의고사 2회 - 1/2 (0) | 2022.06.19 |
[빅데이터 분석기사] 실기 모의고사 1회 - 1/2 (0) | 2022.06.17 |
[빅데이터 분석기사] 2회 기출문제 연습(R 코드) - 3/3 (0) | 2022.06.16 |
[빅데이터 분석기사] 2회 기출문제 연습(R 코드) - 2/3 (0) | 2022.06.15 |
댓글