- [머신러닝 모델링을 통한 타이타닉 데이터 분석]2023년 07월 09일 21시 30분 34초에 업로드 된 글입니다.작성자: r-code-for-data-analysis
머신러닝 타이타닉 생존자 예측
2023-07-09
knitr::opts_chunk$set(echo=F, fig.align = "center", message=F, warning=F, fig.height = 5, cache=T, dpi = 300)
#데이터 불러오기 데이터 변수와 형식을 보자. Survived 가 우리가 예측해야 하는 종속변수이고, 나머지 컬럼이 독립변수이다. ```r str(train)
## 'data.frame': 891 obs. of 12 variables: ## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ... ## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ... ## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ... ## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ... ## $ Sex : chr "male" "female" "female" "female" ... ## $ Age : num 22 38 26 35 35 NA 54 2 27 14 ... ## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ... ## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ... ## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ... ## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ... ## $ Cabin : chr NA "C85" NA "C123" ... ## $ Embarked : chr "S" "C" "S" "S" ...
데이터 정제
- 필요없는 컬럼은 삭제한다. 이때 train을 삭제하면, test도 삭제해야 한다.
- 문자형은 범주형으로 바꿔준다.
- target 인 Survived는 숫자로 표시되어 있지만 범주형으로 바꿔준다. (분류모델)
PassengerId, Name, Ticket,Cabin 열은 삭제한다. %<>% 오퍼레이터를 사용하면 편하다.
## Survived Pclass Sex Age SibSp Parch Fare Embarked ## 1 0 3 male 22 1 0 7.2500 S ## 2 1 1 female 38 1 0 71.2833 C ## 3 1 3 female 26 0 0 7.9250 S ## 4 1 1 female 35 1 0 53.1000 S ## 5 0 3 male 35 0 0 8.0500 S ## 6 0 3 male NA 0 0 8.4583 Q
na 가 있는 열 확인하기
colSums(is.na(train))
## Survived Pclass Sex Age SibSp Parch Fare Embarked ## 0 0 0 177 0 0 0 2
colSums(is.na(test))
## Pclass Sex Age SibSp Parch Fare Embarked ## 0 0 86 0 0 1 0
모델구축
훈련/검증 데이터 나누기
train 데이터를 df_train과 df_test로 나눈다. df_train으로 모델 훈련을 하고, df_test로 검증한다. 나중에 test 데이터를 모델에 넣어 나온 값을 subbmssion 으로 제출한다.
idx <- createDataPartition(train$Survived, p=0.7, list=F) df_train <- train[idx,] df_test <- train[-idx,] head(df_train)
## Survived Pclass Sex Age SibSp Parch Fare Embarked ## 1 0 3 male 22 1 0 7.2500 S ## 3 1 3 female 26 0 0 7.9250 S ## 5 0 3 male 35 0 0 8.0500 S ## 6 0 3 male NA 0 0 8.4583 Q ## 7 0 1 male 54 0 0 51.8625 S ## 8 0 3 male 2 3 1 21.0750 S
##결측치 대체 (knn)
#결측치 제거거 (knn) df_train <- df_train %>% na.omit() df_test <- df_test %>% na.omit() # na 가 있는 열 확인하기 colSums(is.na(df_train))
## Survived Pclass Sex Age SibSp Parch Fare Embarked ## 0 0 0 0 0 0 0 0
colSums(is.na(df_test))
## Survived Pclass Sex Age SibSp Parch Fare Embarked ## 0 0 0 0 0 0 0 0
모델만들기
#로지스틱 회귀 모델 m1<-train(Survived~., data=df_train, method="glm") #랜덤포레스트 모델 m2<-randomForest(Survived~., data=df_train, ntree=100, proximity=T) #의사결정나무 모델 tree <- rpart(Survived ~ ., data = df_train) # Fast 램덤포레스트 모델 set.seed(101) rfo <- ranger(Survived ~ ., data = df_train, importance = "impurity") # XGBoost 모델 set.seed(102) bst <- xgboost( data = data.matrix(subset(df_train, select = -Survived)), label = df_train$Survived, objective = "reg:linear", nrounds = 100, max_depth = 5, eta = 0.3, verbose = 0 # suppress printing )
## [21:37:17] WARNING: src/objective/regression_obj.cu:213: reg:linear is now deprecated in favor of reg:squarederror.
모델별 중요도 보기
##예측하기
모델 평가하기 (Accuracy)
모델별 성능 비교 시각화
Best 모델로 다시 모델링하고 test 예측하기
## function(x){as.numeric(levels(x))[x]} ## <bytecode: 0x000001d820b4f6b0>
정답 제출하기
728x90반응형'데이터 분석' 카테고리의 다른 글
R을 이용한 시계열 분석 연습 (인구, 출생율) (0) 2023.11.04 DACON 영화관객수 예측(회귀) (1) 2023.10.21 [R을 이용한 타이타닉 생존자 예측] (0) 2023.07.09 R을 이용한 축구 데이터 분석 (MAP) (0) 2023.06.11 점탄성 특성 분석 (ANOVA, PCA분석) (0) 2023.05.30 댓글