데이터 정의 및 탐색적 데이터 분석(EDA)
1) 데이터 정의
iris 데이터셋은 꽃잎의 각 부분의 너비와 길이들을 측정한 데이터이며 150개의 레코드로 구성되어 있다.
변수명 | 변수 설명 |
Sepal.Length | 꽃받침의 길이 |
Sepal.Width | 꽃받침의 너비 |
Petal.Length | 꽃잎의 길이 |
Petal.Width | 꽃잎의 너비 |
Species | 꽃의 종류 |
2) 탐색적 데이터 분석
> head(iris)
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
> str(iris)
'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(iris)
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
탐색적 데이터 분석 결과 결측치와 이상치를 발견할 수 없고 전처리가 필요한 변수도 없다.
다중 분류 분석
1) 모델 생성 및 예측
library(SyncRNG)
v <- 1:nrow(df)
s <- SyncRNG(seed=38)
idx <- s$shuffle(v)[1:round(nrow(df)*0.7)]
idx[1:length(idx)]
train <- df[idx,]
test <- df[-idx,]
m_rf<-randomForest(Species~.,train,ntree=100)
p_rf<-predict(m_rf, test[,-5])
R과 Python의 iris 데이터를 동일하게 나누기 위해 SyncRNG 함수를 사용하여 train,test 데이터셋을 만들고
트리수를 100개로 지정해 랜덤 포레스트 모델을 생성했다.
2) 모델 평가
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.9333
95% CI : (0.8173, 0.986)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.9
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.8667 0.9333
Specificity 1.0000 0.9667 0.9333
Pos Pred Value 1.0000 0.9286 0.8750
Neg Pred Value 1.0000 0.9355 0.9655
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.2889 0.3111
Detection Prevalence 0.3333 0.3111 0.3556
Balanced Accuracy 1.0000 0.9167 0.9333
predict 함수로 랜덤포레스트를 진행한 m_rf 변수와 test set을 이용하여
모델평가를 진행하였는데, 여기서 정확도가 93%로 예측력이 매우 높은 모델임을 알 수 있다
3) 시각화
plot(m_rf)
randomForest::varImpPlot(m_rf)
plot 함수를 이용해서 모델을 시각화 했고,
randomForest::varImpPlot() 함수를 이용해 랜덤포레스트 모형을 사용한 변수 중요도를 시각화 했다.
각각의 컬럼들의 트리수가 많아질수록 에러율이 적어지고, 트리수가 20개 이후로는 에러율이 일정한 것을 알 수 있다.
각 tree에서 해당 feature를 기준으로 분류하는 지점에서의 불순도의 총합을 계산후 모든 tree의 값들의 평균을 낸것을 표로 나타낸 것이다. 여기서 Petal.Length, Petal.Width가 모델이 분류를 하는데에 중요하게 작용되는 것들이다.
'R > 실습(project)' 카테고리의 다른 글
[R/머신러닝/실습] 로지스틱 회귀 분석 (0) | 2023.01.12 |
---|---|
[R/머신러닝/실습] 단순 선형회귀 분석 (0) | 2023.01.05 |
[R/실습] ggplot2를 이용한 iris 데이터 시각화 (0) | 2023.01.03 |
[R/실습] Zelensky 대통령 연설문 모음 텍스트 분석 - 연관 분석 (0) | 2022.12.20 |
[R/실습] Zelensky 대통령 연설문 모음 텍스트 분석 - 단어 구름 생성 (1) | 2022.12.20 |
댓글