본문 바로가기

자격증/빅데이터 분석기사

SVM in R

 

타이타닉 생존자를 분류하는 분석 전체 코드

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 변수에 대해 원-핫 인코딩 수행)
  • 모델 훈련과 예측에  (독립변수 + 종속변수) 데이터셋을 사용한다.

'자격증 > 빅데이터 분석기사' 카테고리의 다른 글

랜덤포레스트 in R  (0) 2022.11.26
로지스틱회귀(분류) in R  (0) 2022.11.25
KNN in R  (0) 2022.11.25
의사결정나무 in R  (1) 2022.11.25
모의고사 2  (0) 2022.11.25