Kaggle泰坦尼克生存预测之随机森林学习

2024-02-28 06:50

本文主要是介绍Kaggle泰坦尼克生存预测之随机森林学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇文章讲述的是Kaggle上一个赛题的解决方案——Titanic幸存预测.问题背景是我们大家都熟悉的【Jack and Rose】的故事,豪华游艇与冰山相撞,大家惊慌而逃,可是救生艇的数量有限,无法人人都有。赛题官方提供训练数据和测试数据两份数据,训练数据主要是一些乘客的个人信息以及存活状况,测试数据也是乘客的个人信息但是没有存活状况的显示。所以本文的主要目的就是,根据训练数据生成合适的模型并预测测试数据中乘客的生存状况。

阅读路线:
  • 预览数据
  • 数据初分析
  • 弥补缺失值
  • 建立模型并预测
  • 随机森林算法的理解
预览数据

先看看我们的数据长什么样子,赛题官方给我们提供了两份数据train.csv,test.csv为了方便我们先把所需要的R库给加载了,其中一些R库大家平常没有用到的话,要记得下载。

library(readr) # File read / write
library(ggplot2) # Data visualization
library(ggthemes) # Data visualization
library(scales) # Data visualization
library(plyr)# Data manipulation
library(stringr) # String manipulation
library(InformationValue) # IV / WOE calculation
library(MLmetrics) # Mache learning metrics.e.g. Recall, Precision,Accuracy, AUC
library(rpart) # Decision tree utils
library(randomForest) # Random Forest
library(dplyr) # Data manipulation
library(e1071) # SVM
library(Amelia) # Missing value utils
library(party) # Conditional inference trees
library(gbm) # AdaBoost
library(class) # KNN.

读取数据

#通过getwd()函数查看当下工作路劲,把文件放到当下工作路径中
train <-read_csv("train.csv")
test <-read_csv("test.csv")
data<- bind_rows(train, test)  #组合
train.row<- 1:nrow(train)
test.row<- (1 + nrow(train)):(nrow(train) + nrow(test))

注意:

  1. 这里是把训练数据和测试数据合并了,原因是之后的操作过程中要对数据的格式做转换,还会对分类变量增加新的level(比如:分类变量性别,我们的操作就是,原有的基础之上,增加一个字段 为男的列和一个字段为女的列)为了避免重复操作和出错,所以就干脆一起操作了。
  2. bind_rows()用法:
    When row-binding, columns are matched by name, and any missing columns with be filled with NA,简单的来说就是按照列来组合两份数据,少列的自动填充为NA值(大家查资料的时候,能用谷歌就用谷歌吧,并在英文状态下搜索)

观察数据

> str(data)     
Classes ‘tbl_df’, ‘tbl’ and '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" ...
> > str(test)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	418 obs. of  11 variables:$ PassengerId: int  892 893 894 895 896 897 898 899 900 901 ...> str(train)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	891 obs. of  12 variables:$ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...

由结果可见,数据集包含12个变量,1309条数据,其中891条为训练数据,418条为测试数据。

  • PassengerId 整型变量,标识乘客的ID,递增变量,对预测无帮助
  • Survived 整型变量,标识该乘客是否幸存。0表示遇难,1表示幸存。将其转换为factor变量比较方便处理
  • Pclass 整型变量,标识乘客的社会-经济状态,1代表Upper,2代表Middle,3代表Lower
  • Name 字符型变量,除包含姓和名以外,还包含Mr.
    Mrs. Dr.这样的具有西方文化特点的信息
  • Sex 字符型变量,标识乘客性别,适合转换为factor类型变量
  • Age 整型变量,标识乘客年龄,有缺失值
  • SibSp 整型变量,代表兄弟姐妹及配偶的个数。其中Sib代表Sibling也即兄弟姐妹,Sp代表Spouse也即配偶
  • Parch 整型变量,代表父母或子女的个数。其中Par代表Parent也即父母,Ch代表Child也即子女
  • Ticket 字符型变量,代表乘客的船票号 Fare 数值型,代表乘客的船票价
  • Cabin 字符型,代表乘客所在的舱位,有缺失值
  • Embarked 字符型,代表乘客登船口岸,适合转换为factor型变量
数据初分析

我们这一步的主要目的看看除了PassengerId 整型变量以外,其他10个变量和乘客的幸存率之间是什么关系。让我们先看一下训练集中的乘客幸存率是如何的。

> table(train$Survived)0   1 
549 342 
> prop.table((table(train$Survived))) #prop.table()是计算表中值的百分比,这里就是我们的得到的列联表0         1 
0.6161616 0.3838384 

这里大家不要忘了数值1代表幸存,数值0代表的是遇难。所以从上面我们就能轻松看到乘客幸存率约为38%(342/891),也就是说约62%(549/891)的乘客丧命。那赛题官方给我们的测试集(test.csv)中人员的生存情况又是如何的呢?其实,这就需要我们建立数学模型来预测了,但是在之前,我们要找到数据集中的哪些变量对幸存这个事件是有影响的呢?来吧,我们接着往下看。
注意:table()函数对应统计学中列联表,用于记录频数(学习链接)

  • 乘客社会等级与幸存率的影响

记得小时候看古装片,比如说一个太尉带着一帮人出去游玩,遭到了埋伏,这时就有贴身侍卫说保护太尉、带太尉先走,我来掩护。那么外国的权贵们会不会也受到同等的待遇呢?

data$Survived <- factor(data$Survived) #变成因子型变量
ggplot(data = data[1:nrow(train),], mapping = aes(x = Pclass, y = ..count.., fill=Survived)) + geom_bar(stat = "count", position='dodge') + xlab('Pclass') + ylab('Count') + ggtitle('How Pclass impact survivor') + scale_fill_manual(values=c("#FF0000", "#00FF00")) +geom_text(stat = "count", aes(label = ..count..), position=position_dodge(width=1), , vjust=-0.5) + theme(plot.title = element_text(hjust = 0.5), legend.position="bottom")

由图我们能够清晰的看出,Pclass=1的乘客大部分幸存,Pclass=2的乘客接近一半幸存,而Pclass=3的乘客只有不到25%幸存,所以可以认为乘客社会等级越高,幸存率是越高的。

其实当我们要用模型方法(逻辑回归、随机森林、决策树等)构建数学模型时,经常会剔除掉一些变量,比如有100个变量,可能会取其中的几十个。那你可能要问筛选的原则是什么呢?其实最主要和最直接的衡量标准是就是变量的预测能力,可以简单理解成这个变量能够预测一个结果发生的可信度。而衡量变量的预测能力的主要的指标是IV(Information Value)信息价值,但是在计算IV之前,要先计算出WOE,因为IV的计算是以WOE为基础的(WOE的全程为Weight Of Evidence,即是证据权重),暂时先知道这些名词的意思吧,写主智商着急,不会证明啊。

> WOETable(X=factor(data$Pclass[1:nrow(train)]), Y=data$Survived[1:nrow(train)])CAT GOODS BADS TOTAL     PCT_G     PCT_B        WOE         IV
1   1   136   80   216 0.3976608 0.1457195  1.0039160 0.25292792
2   2    87   97   184 0.2543860 0.1766849  0.3644848 0.02832087
3   3   119  372   491 0.3479532 0.6775956 -0.6664827 0.21970095
> IV(X=factor(data$Pclass[1:nrow(train)]), Y=data$Survived[1:nrow(train)])
[1] 0.5009497
attr(,"howgood")
[1] "Highly Predictive"

从结果可以看出,Pclass的IV为0.5,且“Highly Predictive”。由此可以暂时将Pclass作为预测模型的特征变量之一。

  • 性别对于幸存率的影响

如果大家看过这部电影的话,应该对当时副船长说的【lady and kid first!】有印象,这么说是不是

这篇关于Kaggle泰坦尼克生存预测之随机森林学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754693

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件