타이타닉 생존자를 분류하는 분석 전체 코드
library(dplyr)
library(ggplot2)
# install.packages("e1071")
library(e1071)
df <- read.csv("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv",stringsAsFactors=TRUE)
summary(df)
df_new <- df
# 데이터 전처리
# 결측값 대치
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") # 최빈값 대치
# 파생변수 Familysize 생성
df_new$Familysize <- df$SibSp + df$Parch
# 원-핫 인코딩 ★ SVM은 원-핫 인코딩 !!
# Sex 변수
df_new <- mutate(df_new, Male = ifelse(df_new$Sex=="male",1,0))
df_new <- mutate(df_new, Female = ifelse(df_new$Sex=="female",1,0))
# Embarked 변수
df_new <- mutate(df_new, C=ifelse(df_new$Embarked=="C",1,0))
df_new <- mutate(df_new, Q=ifelse(df_new$Embarked=="Q",1,0))
df_new <- mutate(df_new ,S=ifelse(df_new$Embarked=="S",1,0))
# 분석에 사용될 컬럼만 남기기
df_new <- df_new[,c("Survived","Pclass","Female","Male","Age","Fare","C","Q","S","Familysize")]
head(df_new)
# train, test 분리 (7:3)
set.seed(123)
idx <- sample(1:nrow(df_new),0.7*nrow(df_new))
train <- df_new[idx,] # 독립변수 + 종속변수
test <- df_new[-idx,] # 독립변수 + 종속변수
# SVM 모델 학습
model <- svm(Survived~., data=train, type="C-classification")
pred <- predict(model,test, type="class")
# 모델 평가
cm <- table(test$Survived, pred)
cm
acc <-(cm[1,1]+cm[2,2])/nrow(test)
acc
df_new 데이터셋
혼동행렬
정확도
- SVM 분류모델을 위한 라이브러리 : library(e1071)
- SVM 분류모델을 위한 함수 : svm() , type = "C-classification" 지정
- SVM 은 범주형 변수를 원-핫 인코딩 한다. (Sex,Embarked 변수에 대해 원-핫 인코딩 수행)
- 모델 훈련과 예측에 (독립변수 + 종속변수) 데이터셋을 사용한다.