泰坦尼克号幸存者预测

泰坦尼克号幸存者预测

      • 1、特征工程概述
      • 2、数据预处理
      • 3、特征选择与提取
      • 4、建模与预测



1、特征工程概述


在上篇 泰坦尼克号幸存者数据分析 中,我们对泰坦尼克号的幸存者做了数据分析,通过性别、年龄、船舱等级等不同维度对幸存者进行了分类统计,回答了哪些人可能成为幸存者

本文我们将对泰坦尼克号数据集应用特征工程、训练分类模型并对幸存者进行预测

特征工程是机器学习工作流程中重要的组成部分,它是将原始数据转化成模型可理解的形式的过程。如何基于给定数据来发挥更大的数据价值就是特征工程要做的事情

在2016年的一项调查中发现,数据科学家的工作中,有超过80%的时间都在获取、清洗和组织数据;构造机器学习流水线的时间不到20%。可见特征工程的重要性

特征工程在机器学习流程中的位置如下:

在这里插入图片描述
特征工程处在原始数据和特征之间。它的任务就是将原始数据翻译成特征的过程,这个过程将数据转换为能更好的表示业务逻辑的特征,从而提高机器学习的性能

特征工程主要包括数据预处理、特征选择与提取等

2、数据预处理


对于泰坦尼克号数据集的预处理,包括缺失值处理和特征编码

2.1、缺失值处理

上篇中,我们查看了数据集的缺失情况:

  • 训练集:Age(177)、Cabin(687)、Embarked(2)
  • 测试集:Age(86)、Fare(1)、Cabin(327)

对于缺失值的处理,我们一般选择填充和删除:

# 年龄(Age)=> 均值填充
data['Age'].fillna(data['Age'].mean(), inplace=True)
# 船票价格(Fare)=> 均值填充
data['Fare'].fillna(data['Fare'].mean(), inplace=True)
# 座位号(Cabin)=> 缺失较多,删除
data.drop(columns='Cabin', inplace=True)
# 登船码头(Embarked)=> 众数填充
data['Embarked'].fillna(data['Embarked'].mode(), inplace=True)

2.2、特征编码

数值型数据我们可以直接使用;对于日期型数据,我们需要转换成单独的年月日;对于分类型数据,需要使用特征编码转换为数值

1)分类特征:Sex(male/female)、Embarked(C/Q/S)

编码方案如下:

# 性别(Sex)=> 男(male):1,女(female):0
sex_map = {'male': 1, 'female': 0}
data['Sex'] = data['Sex'].map(sex_map)
# 登船码头(Embarked)=> 独热编码
embarked_dum = pd.get_dummies(data['Embarked'], prefix='Embarked', dtype=int)
# 删除源数据中的Embarked列,添加编码后的Embarked
data.drop(columns='Embarked', axis=1, inplace=True)
data = pd.concat([data, embarked_dum], axis=1)

2)非分类特征:Fare、Age

对于非分类特征,我们一般进行分箱处理:

# 根据样本分位数进行分箱,等比例分箱
# 船票价格(Fare) => 分箱并序数编码
data['FareBand'] = pd.qcut(data['Fare'], 4, labels=[0, 1, 2, 3])
# 删除Fare特征
data.drop(columns='Fare', inplace=True)# 年龄(Age) => 分箱并序数编码
data['AgeBand'] = pd.cut(data['Age'], bins=[0, 12, 18, 60, 140], labels=[0, 1, 2, 3])
# 删除Age特征
data.drop(columns='Age', inplace=True)

3、特征选择与提取


3.1、特征提取

1)头衔特征

通过观察数据,我们发现乘客姓名中包含头衔,例如Mrs表示已婚女性。这些头衔可以将乘客进一步细分

提取姓名中的头衔:

# 提取姓名中的头衔
def extract_title(name: str):return name.split(',')[1].split('.')[0].strip()

添加头衔特征:

# 添加头衔特征
data['Title'] = data['Name'].apply(extract_title)

查看头衔及数量:

# 查看头衔及数量
print(data['Title'].value_counts().reset_index())

在这里插入图片描述
由于头衔类别较多,且部分不同写法但意思相同,需要整合

# 整合意思相同的头衔
data['Title'].replace(['Capt', 'Col', 'Major', 'Dr', 'Rev', 'Jonkheer', 'Don', 'Sir', 'the Countess', 'Dona', 'Lady'], 'Other', inplace=True)
data['Title'].replace(['Mme', 'Ms'], 'Mrs', inplace=True)
data['Title'].replace(['Mlle'], 'Miss', inplace=True)
print(data['Title'].value_counts().reset_index())

在这里插入图片描述
对头衔特征进行编码,转化为数值:

# 头衔特征编码:序数编码
title_map = {'Mr': 0, 'Miss': 1, 'Mrs': 2, 'Master': 3, 'Other': 4}
data['Title'] = data['Title'].map(title_map)# 删除Name特征
data.drop(columns='Name', axis=1, inplace=True)

2)家庭规模特征

通过观察数据,我们发现我们可以通过乘客兄弟姐妹及配偶人数和乘客父母及子女人数计算得到本次出行的乘客家庭规模

# 家庭规模(FamilySize) = 兄弟姐妹及配偶人数(SibSp) + 父母及子女人数(Parch) + 乘客自己(1)
data['FamilySize'] = data['SibSp'] + data['Parch'] + 1
# 对家庭规模特征进行分箱:1人(Alone)、2-4人(Small)、>4人(Large)
data['FamilySize'] = pd.cut(data['FamilySize'], bins=[1, 2, 5, 12], labels=['A', 'S', 'L'], right=False, include_lowest=True)
# 家庭规模特征编码:序数编码
fs_map = {'A': 0, 'S': 1, 'L': 2}
data['FamilySize'] = data['FamilySize'].map(fs_map)
# 删除SibSp、Parch特征
data.drop(columns=['SibSp', 'Parch'], inplace=True)

3.2、特征选择

更多的数据优于更好的算法,而更好的数据优于更多的数据。删除无关特征,最大程度保留数据

# 删除其他无关特征
data.drop(columns=['PassengerId', 'Ticket'], inplace=True)
# 应用了特征工程的数据
print(data.head().to_string())

在这里插入图片描述
将非数值型的原始数据转化为数值型的特征,这就是特征工程所做的事情

4、建模与预测


保存特征工程处理后的数据,以方便进行训练和评估:

# 保存特征工程处理后的数据(训练集和测试集)
data.to_csv("new_train.csv", index=False, encoding='utf-8')

特征工程处理后的泰坦尼克号数据集下载(训练集和测试集):传送门

需要注意的是,测试集不包含Survived列。因此,我们将对处理后的训练集重新进行训练集与测试集的划分,并基于新的训练集与测试集建模和预测

# 训练集和测试集
train = pd.read_csv("new_train.csv")
# X_test = pd.read_csv("new_test.csv")
X_train = train.iloc[:, 1:]
y_train = train.iloc[:, 0]from sklearn.model_selection import train_test_split# 重新划分训练集(80%)和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=0.2, random_state=0)

下面我们使用多种分类算法进行建模和预测

4.1、逻辑回归(幸存者预测)

from sklearn.linear_model import LogisticRegression# 逻辑回归分类器(二分类)(默认求解器lbfgs、分类方式OvR)
lr = LogisticRegression()
# 训练模型
lr.fit(X_train, y_train)# 预测
y_pred = lr.predict(X_test)
# print(y_pred)# 准确度评分
print(lr.score(X_test, y_test))   # 0.7821229050279329

4.2、K近邻分类(幸存者预测)

from sklearn.neighbors import KNeighborsClassifier# KNN分类器(默认使用标准欧几里德度量标准)
knn_clf = KNeighborsClassifier(n_neighbors=2)
# 训练模型
knn_clf.fit(X_train, y_train)# 预测
y_pred = knn_clf.predict(X_test)
# print(y_pred)# 平均准确度
print(knn_clf.score(X_test, y_test))   # 0.8156424581005587

现在,只要给定一个新的乘客的数据,我们就能预测该乘客在此次泰坦尼克号事故中是否幸存了,而且,预测准确率约达80%



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode算法训练日记 | day25

一、组合总和Ⅲ 1.题目 Leetcode:第 216 题 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…

2023年MathorCup数学建模D题航空安全风险分析和飞行技术评估问题解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 D题 航空安全风险分析和飞行技术评估问题 原题再现 飞行安全是民航运输业赖以生存和发展的基础。随着我国民航业的快速发展,针对飞行安全问题的研究显得越来越重要。2022 年 3 月 21 日,“3.21”空难的发生…

[CSS]使用方式+样式属性

层叠样式表(Cascading Style Sheets),与HTML一样,也是一种标记语言,其作用就是给HTML页面标签添加各种样式,定义网页的显示效果,将网页内容和显示样式进行分离,提高了显示功能。简单…

Jenkins使用-绑定域控与用户授权

一、Jenkins安装完成后,企业中使用,首先需要绑定域控以方便管理。 操作方法: 1、备份配置文件,防止域控绑定错误或授权策略选择不对,造成没办法登录,或登录后没有权限操作。 [roottest jenkins]# mkdir ba…

K8s 命令行工具

文章目录 K8s 命令行工具kubectl 工具在任意节点使用kubectl方式创建对象命令显示和查找资源更新资源修补资源编辑资源Scale 资源删除资源查看pod信息节点相关操作 K8s 命令行工具 在搭建集群的时候,我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具&…

华为云配置安全组策略开放端口

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

这家动画公司,女神表情灵动秒杀90%的国漫女角色!

当3D国漫市场逐渐加入“内卷”的行列,从大的底层创作引擎UE的运用迭代,到细节的人物动捕、面捕技术的实际结合,在这场内卷的百舸争流中,涌现出一家家风格各异的头部国漫制作公司:有整体偏写实风格的原力动画&#xff0…

多媒体互动装置如何助力智慧城市展厅的信息化建设?

随着现代化科技技术的发展,智慧城市的建设概念与实施也日益成熟,其中智慧城市展厅便是用于展示智慧城市理念、技术和规划的重要平台,而应用在其中的多媒体互动装置,更是起着重要的作用,它们能够让观众更直观地了解和体…

AI识别技术详解 --在windows环境中部署基于YOLO v8模型的目标检测

首先 YOLO是一个端到端的目标检测算法,一次前向传播计算,实现图像的多目标检测任务,我么可以在ultralytics官网上查看YOLO的各个版本(v1-v8)以及源码 使用YOLO v8提供的python接口,训练一个佩戴安全帽的目标…

关于Unity使用DLL的说法

最近在研究一些构建依赖相关的,特别是Unity在不同平台上使用第三方类库时候的问题。简单查了一下资料,其实不难理解,这里只是简单的记录一下,弄明白一个简单的道理就行了。 为什么有的第三方库(DoTween),NewtonSoft等的dll库&…

数组算法——查询位置

需求 思路 使用二分查找找到第一个值,以第一个值作为界限,分为左右两个区间在左右两个区间分别使用二分查找找左边的7,:找到中间位置的7之后,将中间位置的7作为结束位置,依次循环查找,知道start>end,返回…

uniapp小程序中使用video视频播放卡顿

问题:在使用uniapp小程序的video视频播放,视频已经在播放了,但是进度条没走,还是卡顿的状态(测试ios能正常使用,安卓手机会出现此问题) 在网上找了很多方法,最多的说是用:custom-cache"false",试了并没有效果,看来和我问题不一样,后来用了个简单粗暴的方法,发现是有效…

超标量处理器设计:两位饱和计数器基于局部历史的分支预测

★ 继续学习体系结构的知识。 1. 什么是分支预测 程序中有一种叫做分支指令的指令,如果在取指令阶段就可以预知本周期所取指令中是否存在分支指令,并且知道其方向(跳转/不跳转)以及目标地址,就可以从在下个周期从分支…

一文读懂Java中的WebEndpointProperties类(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 对于Java的相关知识,推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 1. 基本知识 Spring Boot 的配置类 WebEndpointProperties,用于配置 Web 端…

为什么市面上的数藏都长得很像?

为什么市面上的数藏都长得很像 一、NFT数藏的市场前景和概念二、目前市面上的数藏类型(九类)1. 头像类(PFP)2. 游戏类3. 艺术品/文物类4. 音乐类5. 影视类6. 演出类7. 门票类8. 体育类9. 品牌实物联名 三、各大数藏的相同点&#…

(弟)递归•斐波那契数、n的k次方

这里是目录哦 题目一:递归计算斐波那契数斐波那契数的定义代码运行截图递归过程递归停止条件(1个参数)✨非递归实现方法 题目二:递归实现n的k次方代码运行截图递归过程递归停止条件(不止1个参数)✨ 加油&am…

Java 中文官方教程 2022 版(四十九)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html JAXB 示例 原文:docs.oracle.com/javase/tutorial/jaxb/intro/examples.html 以下部分描述如何使用包含在 JAXB RI 捆绑包中的示例应用程序。JAXB RI 捆绑包可从jaxb.java.net获取。下载并安装…

4月全新热文高科技,套用模板一键生成热文,没脑子拷贝,第二天出盈利

撰写热门文章,如今日头条或微信公众号文章,通常需要多长时间呢?从构思主题、搜集资料,到撰写成文,整个过程至少需要1小时,有时甚至可能需要2小时。 项目 地 址:laoa1.cn/1627.html 现在&…

位像素海外仓管理系统对接ERP系统教程,一对一教学

在海外仓管理过程中,对接ERP系统的重要性不言而喻的。这种对接不仅能让数据实时共享,还能让海外仓管理者优化整个供应链管理流程。 因此,今天小编就来教大家,海外仓仓库系统是怎么对接ERP物流系统的? 1.分析需求 在对接…

微信小程序兼容iphone适配安全区域

背景&#xff1a; 小程序页面底部在ios中会有小黑条遮挡 上代码&#xff1a; padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */ padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS > 11.2 */ 项目描述&#xff1a; 微信小程序是通过…