泰坦尼克号幸存者预测

泰坦尼克号幸存者预测

      • 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…

libftdi1学习笔记 1 - 打开/关闭设备

目录 1. 获取版本信息 2. 创建上下文对象 3. 查找FTDI设备 4. 获取字符串描述符 5. 指定接口 6. 打开设备 6.1 指定VID/PID的方式 6.2 指定描述符的方式 6.3 指定描述符和设备索引的方式 6.4 其他方式 7. 关闭设备 libftdi1是一个升级版本的库(旧的版本是…

K8s 命令行工具

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

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

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

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

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

乌龟棋(c++实现)

题目 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘只有一行,该行有 N个格子,每个格子上一个分数(非负整数)。 棋盘第 1 格是唯一的起点,第 N 格是终点,游戏要求玩家控制一个…

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

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

天空盒1-天空盒的实现原理

天空盒是一种常用的实时渲染技术,用于在三维场景中模拟远处环境,例如天空、山脉或城市等。它通过将一个立方体贴图(也称为环境贴图)投影到场景的背景中,给人一种无限远的感觉。以下是天空盒的实现原理: 创建…

对策略设计模式的一个小扩展

在基于产品的二次开发过程中,有时需要对产品项目中预制的某一个策略实现作些修改。但又不想修改策略的路由信息。以免调用方需要更新参数或修改代码等。基于此,对产品的策略接口作了一个小扩展,加上了一个可替换相同策略的boolean函数。效果还…

统一登陆实现简化流程

比如,前端使用vue,后端使用abp框架 则首先需要一个统一的中央认证服务,来给每个后端服务通信以验证用户凭据,并返回访问令牌, 中央认证服务保存各自后端的令牌,后端服务使用JWT或其他机制验证令牌的有效性。 1、前端登录请求中央认证服务,返回认证服务自己的令牌 2、…

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

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

解释Python中的并发和并行编程

解释Python中的并发和并行编程 在Python编程中,并发(Concurrency)和并行(Parallelism)是两个经常被提及的概念,它们都与程序的执行方式有关,但各自有着不同的含义和应用场景。下面我们将详细解…

无人机空气动力学

在现代科技的飞速发展中,无人机已经成为了备受关注的热门话题。它们能够在天空中自由翱翔,执行各种复杂的任务,这一切都离不开空气动力学的奇妙原理。本文将深入剖析无人机的空气动力学,带您领略无人机在空中飞行的神秘世界。 引…

关于Unity使用DLL的说法

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

数组算法——查询位置

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

c++运算符重载详细笔记,有关重载的最常用的用法

在类中重新定义运算符,赋予它新的 只能在类中使用的类运算,称之为运算符重载。 c加入了运算符重载:而实际上我们在不知不觉的情况下就已经在使用运算符重载了。就比如我们经常使用的string类,c在string内部进行了运算符重载&…

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

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