摘要
本文以R语言为基础,利用数据预览,探索式数据分析,缺失值的填补,增加新特征以及去除相关特征等方法,并通过构建随机森林模型,参数调优的方式对kaggle上的泰坦尼克项目进行了生存预测,结果是得分为0.81818,前4%。
一、项目介绍
泰坦尼克生存预测是Kaggle上参赛人数较多的竞赛之一,对于数据爱好者来说是初入机器学习领域相对比较容易的比赛,属于入门级比赛项目。
比赛的目的其实很简单,就是要求参赛选手通过训练数据集分析出什么类型的人更可能幸存,并创建模型预测出测试数据集中的所有乘客是否生还。很明显,该项目属于二分类问题。
数据来源于官方网站,包括训练数据和测试数据两部分数据。
二、加载并预览数据
在加载数据之前,先载入后续分析需要用到的R包。
library("dplyr")
library("ggplot2")
library("caret")
library("randomForest")
导入数据集,将训练集和测试集分别命名为train和test。
getwd()
setwd("../Desktop")
train <- read.csv("train.csv",stringsAsFactors = F,na.strings = "")
test <- read.csv("test.csv",stringsAsFactors = F,na.strings = "")
为了对训练集和测试集进行相同的处理和转换,避免重复操作和数据类型出现不一致的情况,这里将它们合并一起处理,并命名为data数据集。
data <- bind_rows(train,test)
预览数据。
str(data)
结果如下:
'data.frame': 1309 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" ...
可以看出,整个数据集包含12个变量,1309条数据,其中891条为训练数据,418条为测试数据
- PassengerId:整数型变量,表示乘客的ID。
- Survived:整数型变量,表示该乘客是否幸存。0表示遇难,1表示幸存。
- Pclass: 整数型变量,表示乘客的舱位等级,1代表1等舱,2代表2等舱,3代表3等舱。
- Name: 字符型变量,表示乘客姓名。
- Sex:字符型变量,表示乘客性别。
- Age:数值型变量,表示乘客年龄。
- SibSp:整数型变量,兄弟姐妹或配偶的人数。
- Parch: 整数型变量,代表父母或子女的人数。
- Ticket: 字符型变量,代表乘客的船票号。
- Fare: 数值型变量,代表乘客的船票价。
- Cabin: 字符型变量,代表乘客所在的舱位。
- Embarked: 字符型变量,表示乘客的登船地点,C 表示 Cherbourg(瑟堡港), Q 表示Queenstown(皇后镇), S 表示Southampton(南安普敦)。
为了方便后续的分析,这里先统计各列的缺失值的分布情况。
apply(data,2,function(x){sum(is.na(x))}) #汇总缺失值
结果如下:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 418 0 0 0 263 0 0 0 1 1014 2
可以看出,Age,Fare,Cabin,Embarked,以及Survived均包含缺失值,值得注意的是,虽然Survived包含418个缺失值,但它是由测试数据引入的,是需要预测的部分。
三、探索性数据分析
接下来,会逐个探索不同的特征变量与预测变量之间的关系。
(1)Pclass
ggplot(data[