# 버섯 분류 - 나이브 베이즈 방법
# 1. 데이터 준비
mushroom<- read.csv (file = 'mlwr/mushrooms.csv',
encoding = 'UTF-8',stringsAsFactors = T)
# 2. 데이터 확인, 전처리
str(mushroom)
# veil_type 변수(특징)는 모든 관찰값에서 항상 같은 값('partial')
# -> 버섯 분류할 때 사용되지 않는 변수 -> 데이터 프레임에서 제거
mushroom$veil_type <- NULL
# 버섯들의 클래스(분류 레이블) - type 변수
table(mushroom$type)
prop.table(table(mushroom$type))
# 식용 : 독버섯 = 0.517 : 0.483
# 나이브 베이즈 방법을 사용할 학습 데이터 세트 / 테스트 데이터 세트 #정렬된 데이터를 무작위로 섞기
# 학습(75%) : 테스트(25%)
sample_count<- round(nrow(mushroom) * 0.75)
# nrow(데이터프레임) : 데이터프레임의 행(row, observation)의 갯수
# round(): 반올림 함수
set.seed(123) # 같은 순서의 난수들을 발생시키기 위함
sample_rows <- sample(nrow(mushroom),sample_count)
sample_rows
# 학습 데이터 세트
mushroom_train <- mushroom[sample_rows,]
train_label <- mushroom_train[sample_rows,1]
mushroom_train <- mushroom_train[-1] # 첫 번째 컬럼(type)을 제거 !!
# 테스트 데이터 세트
mushroom_test <- mushroom[-sample_rows, ]
test_label <- mushroom_test$type
mushroom_test <- mushroom_test[-1]
str(mushroom_test)
prop.table(table(test_label))
# 3. 모델 생성 - 나이브 베이즈
library(e1071)
classifier <- naiveBayes(mushroom_train, train_label)
summary(classifier)
# 4. 모델 평가
mushroom_predict <- predict(classifier, mushroom_test)
library(gmodels)
CrossTable(x = test_label, y = mushroom_predict,
prop.chisq = F)
# 5 모델 향상 - 라플라스 추정량 변경
classifier <- naiveBayes(mushroom_train, train_label,
laplace = 1)
mushroom_predict <- predict(classifier, mushroom_test)
CrossTable(x= test_label, y = mushroom_predict,
prop.chisq = F)
'R > R 머신러닝' 카테고리의 다른 글
R24_수치 데이터 예측: 회귀 방법2 - 챌린저호의 사고 조사 데이터 (0) | 2019.11.05 |
---|---|
R23_수치 데이터 예측: 회귀 방법 (0) | 2019.11.04 |
R21_규칙 기반 분류 (Classification Rules) (0) | 2019.10.31 |
R20_ 분할 정복 _ 의사결정 트리( Decision Tree ) (0) | 2019.10.30 |
R19_Naive Bays(확률적 학습), Text mining (0) | 2019.10.29 |