티스토리 뷰

728x90

1. 데이터 확인하기

1-1. 데이터 소개

UCI의 공개데이터인 Mushroom을 csv파일로 배포한 것을 사용하였다. 

 

1-2. 데이터 구조 분석하기

- 데이터 불러온다. 

mushroom<-read.csv("mushrooms.csv")

 

- 데이터의 structure를 확인한다. 

str(mushroom)

→ 23개의 변수와 8124개의 데이터를 가지고 있다는 것을 확인할 수 있다. 

→ 변수의 타입이 모두 character이다. 

 

- N/A 결측치가 있는지 확인한다. 

colSums(is.na(mushroom))

→ 결측치를 가지는 변수가 없음을 알 수 있다. 

 

- 각 열들이 어떤 factor들로 분류되어있는지 확인한다. 

name <- names(mushroom)
for(i in 1:length(name)){
  print(name[i])
  print(table(mushroom[name[i]]))
}

→ 독버섯 여부를 표시해주는 type 변수를 통해 나중에 분류의 정확도를 검사할 수 있다. 

 

1-3. 데이터 탐색적 분석하기

-> 필요!!

-> 변수 별로 막대그래프/히스토그램, 도수분포표, summary 등을 탐색해본다. 

-> 정규분포와 거리가 멀어보이는 변수의 경우 제거하는 것도 방법이다. 

-> 산점도를 봤을 때 두 변수가 믹스돼있을 경우 적절하지 않은 변수이다. 

-> 정규성 검정 mvn() - 변수별로 살펴본다. 

 

2. 데이터 분할하기 - Holdout 방식

- simple random sampling 방법을 사용한다. 

- 전체 데이터 중 70%는 training data로, 나머지 30%는 testing data로 분리한다. 

- set.sedd()를 이용해 랜덤 넘버 시드를 주어 계속해서 같은 데이터셋을 만들 수 있다. 

- idx에 각 데이터의 행 번호를 뽑아내는 방법을 사용했다. 

# simple random sampling
set.seed(1234)
idx<-sample(2, nrow(mushroom), replace=T, prob=c(0.7, 0.3))

# trainning data, testing data 생성
train<-mushroom[idx==1,-1]
test<-mushroom[idx==2,-1]

# 각각의 label 생성
train_labels <- mushroom[idx==1,1]
test_labels <- mushroom[idx==2,1]
nrow(train)
nrow(test)

→ 5729개의 training data와 2395개의 testing data로 분리하였다. 

 

3. Naive Bayes Classification 모델 적용하기

-> Naive Bayes Classification 모델의 경우 보통 적합하지 않다!! (모든 변수들이 독립이라는 가정은 보통 맞지 않기 때문이다.)

-> 베이즈 선형 모델을 사용해보자.

-> Bayes Classification 모델은 이산형 데이터보다는 연속형 데이터에 적합한 모델이다. 

 

- 필요한 패키지를 불러온다.

# 나이브 베이즈 분류기 사용
install.packages("e1071")
library(e1071)

# CrossTable 사용
install.packages("gmodels")
library(gmodels)

 

- 모델을 생성한다. 

mushroom_classifier <- naiveBayes(train, train_labels, laplace = 1)

 

- 생성한 모델을 이용하여 testing data를 예측해본다. 

m_pred <- predict(mushroom_classifier, test)

 

- 예측값과 실제 정답을 비교하는 CrossTable을 확인해본다. 

CrossTable(m_pred, test_labels)

 

- accuracy를 확인해본다. 

print(sum(m_pred==test_labels)*100/length(m_pred))

[1] 95.03132

 

-> confficients of linear discriminations를 조사해봐야한다. 

-> training/testing data를 여러번 분류하여 그에 대한 accuracy를 구해내고 그 accuracy들의 평균/분산을 구해야한다. 

-> post probability 또한 알아보자.

 

 

 


ref.

[R] 나이브 베이즈 분류(Naive Bayes Classifier) 활용 데이터 분석 및 실습 - 독버섯 분류하기 (tistory.com)

[ADP] R을 활용한 모형평가 방법(1) - Holdout, K-fold, Boostrap (tistory.com)

7.12 R에서 나이브 베이즈(Naïve Bayes)분석 실시하기 : 네이버 블로그 (naver.com)

 

728x90
댓글
공지사항
최근에 올라온 글