基于R语言的Kaggle案例分析学习笔记(一)
2017-10-13 10:43
621 查看
泰坦尼克号沉船事件
本案例提纲:
1、了解题目背景
2、特征工程
3、模型选择
4、基于R实现模型
1、了解题目背景 泰坦尼克号由位于北爱尔兰贝尔法斯特的哈兰·沃尔夫船厂兴建,是当时最大的客运轮船,由于其规模相当一艘现代航空母舰,因而号称“上帝也沉没不了的巨型邮轮”。在泰坦尼克号的处女航中,从英国南安普敦出发,途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦,计划横渡大西洋前往美国纽约市。但因为人为错误,于1912年4月14日船上时间夜里11点40分撞上冰山;2小时40分钟后,即4月15日凌晨02点20分,船裂成两半后沉入大西洋,死亡人数超越1500人,堪称20世纪最大的海难事件,同时也是最广为人知的海难之一。
以下是本题所给的数据字典:
变量 | 说明 | 备注 |
survival | 是否存活 | 0 = No, 1 = Yes |
sex | 性别 | |
age | 年龄 | |
sibsp:Sibling | 兄弟姐妹 | |
Sibsp:Spouse | 配偶(包二奶和未婚夫被忽略) | |
Parch:Parent | 母亲和父亲 | |
Parch:Child | 女儿,儿子,继女,继子 | 有些孩子只和保姆一起旅行,因此对他们来说PARCH= 0 |
pclass | 船舱等级 | |
ticket number | 船票号码 | |
fare | 费用 | |
embarked | 登船地点 | C = Cherbourg, Q = Queenstown, S =Southampton |
cabin | 舱室 |
本案例主要从家庭规模和称谓两个方面进行,创造新的特征列,感兴趣的伙伴可以创造其他特征,欢迎留言交流。家庭规模=子女人数+配偶+自己,家庭人数小于2的为小家庭,大于6的为大家庭,在2和6之间的为中等家庭。外国人的称谓体现一定的社会地位,所以可以把称谓作为一个特征列,从Name中提取称谓,并将同一称谓的不同表达进行统一,如" Capt"," Don"," Major"," Sir"都可以表示成"sir"。
3、模型选择
本案例是一个分类问题,根据目前的特征列,对乘客分为存活、不存活两类。本案例选择决策树进行,当然感兴趣的伙伴可以尝试其他算法欢迎留言交流。决策树算法是根据信息增益的大小来选择作为分类的特征,信息增益是不存在该特征的情况下的信息熵和存在该特征的信息熵的差值。
4、R语言实现
先解释这部分用到的R语言函数:
1、rpart ( formula, data, weights, subset,na. action =na.rpart,
method, model= FALSE, x= FALSE, y=TRUE,parms, control, cost, . . . )
fomula回归方程形式:例如y~ x 1+ x2+ x3。
data
数据: 包含前面方程中变量的数据框( data frame)。
na. action缺失数据的处理办法:默认办法是删除因变量缺失的观测而保留自变量缺失的观测。
method
根据树末端的数据类型选择相应变量分割方法,
本参数有四种取值: 连续型>anova;离散型>class;计数型(泊松过程)>poisson;生存分析型>exp。程序会根据因变量的类型自动选择方法,但一般情况下最好还是指明本参数,以便让程序清楚做哪一种树模型。
2、rpart.plot(x , type , extra , under ,clip.right.labs ,fallen.leaves
, branch , uniform , digits ,varlen ,faclen ,cex , tweak ,
compress ,ycompres , snip , ...)
参数:x,rpart对象。唯一需要的参数。
以下是实现代码:
数据下载网址是https://www.kaggle.com/c/titanic/data
train=read.csv('D:\\R语言kaggle案例实战\\Kaggle第一节课\\train.csv') test=read.csv('D:\\R语言kaggle案例实战\\Kaggle第一节课\\test.csv') combi<-rbind(train,test)#合并训练集和测试集,便于对全部数据进行预处理和特征提取 mode(combi$Name)#查看数据类型 combi$Name<-as.character(combi$Name)#将数值类型置成字符类型 combi$title<-sapply(combi$Name,FUN=function(x){strsplit(x,split ='[,.]' )[[1]][2]})#对所有数据进行称谓分隔开 data.frame(table(train$title))#查看各称谓的频率 combi$title[combi$title %in% c(" Mlle"," Mme")]<-"Mlle"#将称谓统一成一个称谓 combi$title[combi$title %in% c(" Capt"," Don"," Major"," Sir")]<-"Sir"#将称谓统一成一个称谓 combi$title[combi$title %in% c(" Jonkheer"," the Countess"," Lady")]<-"Lady"#将称谓统一成一个称谓 data.frame(table(combi$title))#查看统一称谓以后各个称谓的个数 combi$title<-as.factor(combi$title)#将称谓置成因子型 combi$familysize<-combi$SibSp+combi$Parch+1#家庭规模=兄弟姐妹+配偶+自己 combi$familysize[combi$familysize>6]<-'large'#家庭规模大于6人称为大型家庭 combi$familysize[combi$familysize<=2]<-'small'#家庭规模小于2人称为小型家庭 combi$familysize[combi$familysize>2 & combi$familysize<=6]<-'Middle'#家庭规模大于2人,小于6人称为小型家庭 combi$familysize<-as.factor(combi$familysize)#将家庭规模置为因子型 train<-combi[1:891,]#再次将数据划分为训练集 test<-combi[892:1309,]#再次将数据划分为测试集 library(rpart) library(rpart.plot) titanic_tree<-rpart(Survived~Pclass+Sex+Age+SibSp+Parch+Fare+Embarked+title+familysize,data=train,method='class')#构建模型 prediction<-predict(titanic_tree,test,type='class')#因变量为离散型的,所以type为class test$Survived<-NA submit<-data.frame(Id=test$PassengerId,Survived=prediction) rpart.plot(titanic_tree,cex = 0.8,type=3)#type表示树的类型,cex表示字体大小
关于决策树的原理,给大家提供一个牛人的博客链接:
http://www.cnblogs.com/pinard/p/6050306.html http://www.cnblogs.com/pinard/p/6053344.html
相关文章推荐
- 基于R语言的Kaggle案例分析学习笔记(六)
- 基于R语言的Kaggle案例分析学习笔记(八)
- 基于R语言的Kaggle案例分析学习笔记(四)
- 基于R语言的Kaggle案例分析学习笔记(三)
- 基于R语言的Kaggle案例分析学习笔记(五)
- 基于案例分析的学习方案
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- 学习笔记3:《大型网站技术架构 核心原理与案例分析》之 大型网站架构模式
- 应用统计学与R语言实现学习笔记(十四)——案例与实践
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
- R语言学习笔记:典型相关分析和对应分析
- [lingpipe学习笔记]基于LingPipe的文本倾向性分析
- R语言 - 基于'狗熊会'基础数据:[筝声琴韵,寻寻觅觅]的案例分析 - 未完成
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
- R语言学习笔记之统计分析篇
- 应用统计学与R语言实现学习笔记(十二)——主成分分析
- 学习笔记1:《大型网站技术架构 核心原理与案例分析》之 大型网站软件系统的特点
- SpringMVC学习笔记(含案例分析)
- 课程笔记-深度学习之逻辑回归(Regression)pokemon案例分析