泰坦尼克号幸存者预测

泰坦尼克号幸存者预测

      • 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.rhkb.cn/news/307594.html

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

相关文章

FME学习之旅---day24

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 高级地理数据库 教程:地理数据库转换 上述教程包括 如何使用 Esri 模板地理数据库 该内容在FME学习之旅day19 已经学习过 使用地理数据库属性域:编写编码属性域 属…

CSS3 常用样式

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍CSS3 常用样式💎1 CSS3 新增选择器🌹1.1 属性选择器…

Centos 下载地址

下载镜像地址: 1、官网地址:The CentOS Project 2、阿里镜像站:centos安装包下载_开源镜像站-阿里云 3、清华镜像源:Index of /centos/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 3.、CentOS搜狐镜像&#xff1…

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案,实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念: 1. **ARITest**: ARITest 是一款功能全面的自动化测试工具,提供 UI 自动化、接口自…

KVM + GFS 分布式存储

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1)Glusterfs 简介 2)Glusterfs 特点 1.3、案例环境 1)案例环境 2)案例需求 3)案例实现思路 二、案例实施 2.1、安装部署 KVM 虚拟化平台 1&…

OpenHarmony实战:瑞芯微RK3568移植案例

本文章是基于瑞芯微RK3568芯片的DAYU200开发板,进行标准系统相关功能的移植,主要包括产品配置添加,内核启动、升级,音频ADM化,Camera,TP,LCD,WIFI,BT,vibrato…

34. UE5 RPG实现鼠标点击移动

在前面,我们实现过使用键盘按键wasd去实现控制角色的移动,现在,我们实现了InputAction按键触发,后面,实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换,如果你点击地面快速松开&#xff0…

时间序列分析 # 平稳性检验和ARMA模型的识别与定阶 #R语言

掌握单位根检验的原理并能解读结果;掌握利用序列的自相关图和偏自相关图识别模型并进行初步定阶。 原始数据在文末!!! 练习1、根据某1971年9月-1993年6月澳大利亚季度常住人口变动(单位:千人)的…

SpringCloud的使用以及五大核心组件

一、SpringCloud介绍 微服务架构的提出者:马丁福勒 https://martinfowler.com/articles/microservices.html // 微服务架构的提出者:马丁福勒(中午网) http://blog.cuicc.com/blog/2015/07/22/microservices/ 马丁.福勒对微服务…

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效,有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效,分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…

【MySQL】锁篇

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📸友情提供 目录 本系列专栏 1. MySQ 中的锁 2. 表锁和行锁 表锁 行锁 3. InnoDB 存储引擎的三种行级锁 4. 悲观锁…

【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…

B004-表达式 类型转换 运算符

目录 表达式数据类型转换自动转换强制转换 运算符数学运算符自增自减运算符i与 i的区别 赋值运算符比较运算符位运算符(了解)逻辑运算符三目运算符 表达式 /*** 表达式定义:由常量 变量 运算符 括号组成的算式,为了按照一定的运算规则计算出结果值* 括…

Java中创建多线程的方法

继承Thread类,对该类进行new一个实例,对实例调用start方法,重写run方法。 缺点:单继承,无法继承 public class myThread extends Thread {public static void main(String[] args) {myThread myThread new myThread()…

【机器学习入门】集成学习之梯度提升算法

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 实操练习 使用Yolo模型进…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

项目实战 | 使用python分析Excel销售数据(用groupby)

项目实战 | 使用python分析Excel销售数据 本文目录: 零、00时光宝盒 一、提出问题 二、理解数据 2.1、安装python读取excel文件的库 2.2、查看excel表的字段名和前几行记录 2.3、查看excel表结构 2.4、查看索引 2.5、查看每一列的列表头内容 2.6、查看每一…

AutoCAD 2024 安装注册教程

前言 大家好,我是梁国庆。 本篇分享的安装包是 AutoCAD 的全新版本——AutoCAD 2024,下文安装教程中简称 AutoCAD。 时间:2024年4月8日。 获取 AutoCAD 安装包 我已将本篇所使用的安装包打包上传至百度云,扫描下方二维码关注…

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …

VRRP(虚拟路由冗余协议)详解

VRRP-------虚拟路由冗余协议 在一个网络中,要做为一个合格的网络首先就要具备几种冗余,增加网络的可靠性。 这几种冗余分别为:线路冗余,设备冗余,网关冗余,UPS冗余 VRRP该协议就是解决网关冗余的。在二层…