library(dplyr)
library(ggplot2)
# 의사결정나무 분류모델을 위한 패키지 임포트
library(rpart)
# 데이터 로드
df <- read.csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv",stringsAsFactors=TRUE)
summary(df)
# species 컬럼에 대해 레이블 인코딩 수행 (setosa:1, versicolor:2, virginica:3)
df$species <- as.numeric(factor(df$species),level= c("setosa","versicolor","virginica"))
# train, test 분리 (8:2)
set.seed(123)
idx <- sample(1:nrow(df), 0.8*nrow(df))
train <- df[idx,] # 독립변수 + 종속변수
test <- df[-idx,] # 독립변수 + 종속변수
# rpart() 함수를 사용하여 의사결정나무 학습
model <- rpart(species~., method="class", data=train)
pred <- predict(model,test,type="class")
# 모델 평가 - 혼동행렬
cm <- table(test$species,pred)
cm
# 모델평가 - 정확도
acc <- (cm[1,1] + cm[2,2] + cm[3,3]) / nrow(test)
acc
species 컬럼 레이블 인코딩
train, test 분리 ( 독립변수 + 종속변수 )
rpart 함수를 이용한 의사결정 나무 학습 ( 종속변수 포함하여 모델 예측 )
모델평가
2. 타이타닉 생존자를 분류하는 분석 전체 코드
library(dplyr)
library(ggplot2)
library(rpart)
df <- read.csv("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv",stringsAsFactors=TRUE)
summary(df)
str(df)
df_new <- df
# 결측값 처리
# Age 변수 결측값 평균 대치
# Embaked 변수 결측값 최빈값 대치
df_new$Age <- ifelse(is.na(df$Age),mean(df$Age,na.rm=TRUE),df$Age)
df_new$Embarked <- replace(df$Embarked,df$Embarked==" ","S")
summary(df_new)
# 레이블 인코딩
# Sex 변수 , Embarked 변수
df_new$Sex <- ifelse(df$Sex=="female",2,1)
df_new$Embarked <- as.numeric(factor(df$Embarked),level=c("C","Q","S"))
# 파생변수 Familysize 생성
df_new$Familysize <- df$SibSp + df$Parch
# 사용할 컬럼만 추출
df_new <- df_new[,c("Survived","Pclass","Sex","Age","Familysize","Fare","Embarked")]
# train, test 분리 (8:2)
set.seed(123)
idx <- sample(1:nrow(df_new), 0.8*nrow(df_new))
train = df_new[idx,] # 독립변수 + 종속변수
test = df_new[-idx,] # 독립변수 + 종속변수
# rpart 함수를 이용한 의사결정나무 학습
model <- rpart(Survived~., method="class",data=train)
pred <- predict(model,test[,-1],type="class") # ★ 종속변수 제외하여 모델 예측
cm <- table(test$Survived,pred)
acc <- (cm[1,1]+cm[2,2]) / nrow(test)
acc