机器学习实战:泰坦尼克号乘客生存率预测(数据处理+特征工程+建模预测)

项目描述

任务:根据训练集数据中的数据预测泰坦尼克号上哪些乘客能生存下来

数据源:csv文件(train.csv)

目标变量:Survived(0-1变量)

数据集预览:

1、英文描述:

2、译文描述:

初步分析

注:代码后紧跟运行结果截图

1、查看数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 导入数据
train = pd.read_csv('train.csv')
print(train.head(10))

2、查看数据量与缺失值 

# 查看数据基本信息
print(train.info())# 结果:共891条数据,共12列,部分列含有缺失值

# 方便查看哪些特征含缺失值
print(train.isnull().sum())

3、分析不同性别的生存率

# 计算不同性别的生存率
survived_sex = train.groupby('Sex')['Survived'].mean()
print(survived_sex)
# 可视化
sns.barplot(x='Sex', y='Survived', data=train, errorbar=None, hue='Sex', palette='viridis')# 结论:女性生存率明显高于男性

3、分析不同年龄段的生存率

# 计算不同年龄段的生存率
train['Age_group'] = pd.cut(train["Age"], bins=[0, 5, 14, 18, 30, 60, 110], labels=['baby', 'child', 'teenager', 'adult', 'old_adult', 'old'], right=False)
survived_age = train.groupby('Age_group', observed=False)['Survived'].mean()
print(survived_age)
# 可视化
order = ['baby', 'child', 'teenager', 'adult', 'old_adult', 'old']
sns.barplot(x='Age_group', y='Survived', data=train, order=order, errorbar=None, hue='Age_group', palette='viridis')
plt.show()# 结论:婴儿生存率明显更高,老人生还率明显更低,随年龄的增长,生存率有下降的趋势

 4、分析不同 Plass 的乘客的生存率

# 计算不同 Plass 的乘客的生存率
survival_pclass = train.groupby('Pclass')['Survived'].mean()
print(survival_pclass)
# 可视化
sns.barplot(x='Pclass', y='Survived', data=train, errorbar=None)
plt.show()# 结论:1、2、3号的生存率由高到低排列

5、 分析不同票价的乘客的生存率

# 计算不同票价的乘客的生存率
train['Fare_group'] = pd.cut(train['Fare'], bins=[0, 5, 15, 25, 50, 100, 200, float('inf')], labels=['very low', 'low', 'normal', 'medium', 'high', 'very high', 'Luxury'], right=False)
print(train.groupby('Fare_group', observed=False)['Survived'].mean())
# 可视化
sns.barplot(x='Fare_group', y='Survived', data=train, errorbar=None, hue='Fare_group', palette='viridis')
plt.show()# 结论:票价越高,生存率越高,高价位生存率在 60% 以上

数据处理与特征工程

1、查看文本特征的取值

# 查看训练集中,名字特征有哪些头衔(代表乘客所属阶级)
print(train['Name'].str.extract(' ([A-Za-z]+\.)')[0].unique())
# 查看训练集 Cabin 有哪些取值
print('Cabin 仓号首字母有:', train['Cabin'].unique())  

 2、数据处理与特征工程

# 数据处理与特征工程from sklearn.impute import KNNImputer
from sklearn.preprocessing import StandardScalerdef pre(df):# 家庭人数df['family'] = df["Parch"] + df["SibSp"]# 提取名字头衔,表示阶级信息df['Title'] = df['Name'].str.extract(' ([A-Za-z]+\.)')df['Title'] = df['Title'].str.replace('.', '')df['Title'] = df['Title'].replace(['Don', 'Lady', 'Capt', 'Col', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')df['Title'] = df['Title'].replace(['Mlle', 'Ms'], 'Miss')df['Title'] = df['Title'].replace('Mme', 'Mrs')# 缺失值处理df['Embarked'].fillna(df['Embarked'].mode()[0])   # 众数填充df['Fare'].fillna(df['Fare'].median())   # 中位数填充# 手动对 Fare 进行独热编码df['very low'] = (df['Fare']<5)df['low'] = (df['Fare']<15) & (df['Fare']>=5)df['normal'] = (df['Fare']<25) & (df['Fare']>=15)df['medium'] = (df['Fare']<50) & (df['Fare']>=25)df['high'] = (df['Fare']<100) & (df['Fare']>=50)df['very high'] = (df['Fare']<300) & (df['Fare']>=100)df['Luxury'] = (df['Fare']>=300)# 填充 Cabin 缺失值,并用仓号第一个字母替代原来的仓号df['Cabin'] = df['Cabin'].fillna('N').map(lambda x: x[0])# KNN 算法填充 Age 的缺失值imputer = KNNImputer(n_neighbors=5)df['Age'] = imputer.fit_transform(df[['Age']])# 对 Age 分组(加上填补的值进分组里),并手动进行标签编码df['Age_group'] = pd.cut(df["Age"], bins=[0, 5, 14, 18, 30, 60, 110], labels=[1, 2, 3, 4, 5, 6], right=False)# 独热编码df = pd.get_dummies(df, columns=['Embarked', 'Title', 'Cabin'], drop_first=True)df['Sex'] = df['Sex'].map({'male': 0, 'female': 1})# 处理特征出现在测试集而不在训练集的可能情况for p in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'T']:col = f'Cabin_{p}'if col not in df.columns:   # 若存在训练集没出现过的字母,则新建一列df[col] = pd.Series([False]*df.shape[0])# 选择对目标变量可能有影响的特征(挑选特征)cols = ['Pclass', 'Title_Miss', 'Title_Mr', 'Title_Mrs','Title_Rare','Sex','Age', 'Age_group','SibSp', 'Parch','Fare', 'very low', 'low', 'normal', 'medium', 'high', 'very high', 'Luxury','Cabin_A', 'Cabin_B', 'Cabin_C', 'Cabin_D', 'Cabin_E', 'Cabin_F','Cabin_G', 'Cabin_T'  # 忽略缺失值 N ]df2 = df[cols].copy()# 标准化数值特征num_features = ['Age', 'Fare', 'Parch', 'SibSp', 'Age_group']scaler = StandardScaler()df2[num_features] = scaler.fit_transform(df2[num_features])return df2

建模过程

# 建模、模型评估from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import accuracy_scoretrain = pd.read_csv('train.csv')
# 特征工程,调用前面定义的函数
train_ = pre(train)   
X = train_  #特征变量
y = train['Survived']   #目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)models = {'逻辑回归': LogisticRegression(),'支持向量机SVM': SVC(),'KNN': KNeighborsClassifier(),'随机森林': RandomForestClassifier(),'梯度提升树': GradientBoostingClassifier()
}
accuary_cores = {'逻辑回归': 0,'支持向量机SVM': 0,'KNN': 0,'随机森林': 0,'梯度提升树': 0
}# 计算模型在各自默认参数下反复训练 n 次的平均准确率
n = 20
for i in range(n):for model_name, model in models.items():model.fit(X_train, y_train)y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)accuary_cores[model_name] += accuracy
print('默认参数下各模型的平均准确率:')
for model_name, accuracy in accuary_cores.items():accuracy /= nprint(f'{model_name}:  {accuracy:.4f}')

注:关于上面多个模型,各有优缺点,模型选择取决于具体任务需求(比如模型解释性需求、模型准确度需求、模型精确度需求等)来选择合适模型,以上模型模型参数还待优化。项目还有很多地方可以完善,我们下期再见叭!

# 若对大噶有帮助的话,希望点个赞支持一下叭!

# 文章若有错误,欢迎大家不吝赐教!

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

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

相关文章

Linux自动化部署方法(Linux Automated Deployment Method)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

嵌入式 FPGA开发

目录 一、引言 二、当前嵌入式 FPGA 开发的现状 三、嵌入式 FPGA 开发的优势 四、嵌入式 FPGA 的应用领域 1. 通信系统 2. 数字信号处理 3. 视频图像处理 4. 高速接口设计 5. 人工智能 6. IC 设计与 PCB 设计类比 五、嵌入式 FPGA 未来发展趋势 六、结论 一、引言 …

工业AI质检 AI质检智能系统 尤劲恩(上海)信息科技有限公司

来的现代化工厂&#xff0c;将逐步被无人化车间取代&#xff0c;无人工厂除了产线自动化&#xff0c;其无人质检将是绕不开的话题。尤劲恩致力于帮助工业制造领域上下游工厂减员增效、提高品质效率&#xff0c;真正实现无人质检IQC/IPQC/OQC的在线质检系统。分析生产环节真实品…

Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧

Angular在其最新版本 v19 中引入了增量水合&#xff08;Incremental Hydration&#xff09;这一特性。这一更新引发了开发者们广泛的讨论&#xff0c;特别是在优化首屏加载速度和改善用户体验方面。本文将详解水合过程的概念、增量水合的应用场景&#xff0c;以及它与类似框架如…

[STM32]从零开始的STM32 FreeRTOS移植教程

一、前言 如果能看到这个教程的话&#xff0c;说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗&#xff1f;是的&#xff0c;我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS&#xff0c;再到最…

Vivado程序固化到Flash

在上板调试FPGA时&#xff0c;通常使用JTAG接口下载程序到FPGA芯片中&#xff0c;FPGA本身是基于RAM工艺的器件&#xff0c;因此掉电后会丢失芯片内的程序&#xff0c;需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序&#xff0c;一般FPGA的外围会…

医疗废物检测

3809总图像数 数据集分割 训练组80&#xff05; 3030图片 有效集20&#xff05; 779图片 测试集&#xff05; 0图片 标签 预处理 自动定向&#xff1a; 已应用 调整大小&#xff1a; 拉伸至 640x640 增强 未应用任何增强。 注射器 手术刀 输液管 医用手套 医用口罩 血渍 数据集…

如何进行JOIN优化

如何进行JOIN优化 简单来说&#xff0c;JOIN是MySQL用来进行联表操作的&#xff0c;用来匹配两个表的数据&#xff0c;筛选并合并符合我们要求的结果集&#xff0c;但使用了Join我们一般会对它多一点关注&#xff0c;在java开发手册中&#xff0c;禁止三个表以上关联使用Join&…

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那&#xff0c;《uniCloud云开发Vue3版本官方推荐用法》&#xff0c;这么课程已经得到了官方推荐&#xff0c;想要快速上手unicloud的小伙伴们&#xff0c;可以学习一下这么课程哦&#xff0c;不要忘了给一键三连呀。 在录制这门课程…

Spring 自调用事务失效分析及解决办法

前言 博主在写公司需求的时候&#xff0c;有一个操作涉及到多次对数据库数据的修改。当时就想着要加 Transactional注解来声名事务。并且由于一个方法中有太多行了&#xff0c;于是就想着修改数据库的操作单独提取出来抽象成一个方法。但这个时候&#xff0c;IDEA 提示我自调用…

常见的数据结构---数组、链表、栈的深入剖析

目录 一、数组&#xff08;Array&#xff09; 二、链表&#xff08;Linked List&#xff09; 三、栈&#xff08;Stack&#xff09; 四、总结 数据结构是算法的基石&#xff0c;是程序设计的核心基础。不同的数据结构适用于不同的场景和需求&#xff0c;选择合适的数据结构能…

KAN-Transfomer——基于新型神经网络KAN的时间序列预测

1.数据集介绍 ETT(电变压器温度)&#xff1a;由两个小时级数据集&#xff08;ETTh&#xff09;和两个 15 分钟级数据集&#xff08;ETTm&#xff09;组成。它们中的每一个都包含 2016 年 7 月至 2018 年 7 月的七种石油和电力变压器的负载特征。 traffic(交通) &#xff1a;描…

【C++算法】20.二分查找算法_x 的平方根

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 69. x 的平方根 题目描述&#xff1a; 解法 暴力解法&#xff1a; 如果x17 从1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5......这些数里面找他们的平方…

阿里云人工智能平台(PAI)免费使用教程

文章目录 注册新建实例交互式建模(DSW)注册 注册阿里云账号进行支付宝验证 新建实例 选择资源信息和环境信息,填写实例名称 资源类型需要选择公共资源,才能使用资源包进行抵扣。目前每月送250计算时。1 * NVIDIA A10 8 vCPU 30 GiB 1 * 24 GiB1 * NVIDIA V100 8 vCPU 32 Gi…

【Web】0基础学Web—html基本骨架、语义化标签、非语义化标签、列表、表格、表单

0基础学Web—html基本骨架、语义化标签、非语义化标签、列表、表格、表单 html基本骨架语义化标签图片属性a链接 非语义化标签特殊符号标签 列表无序列表结果展示 有序列表结果展示 定义列表结果展示 表格table属性tr属性结果展示 表单单标签form属性input属性selecttextareabu…

iwebsec 靶场 —— SSRF 漏洞

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

docker-compose 升级

官方下载地址&#xff1a; https://github.com/docker/compose/releases 下载完放到kali root目录下 # mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose # chmod x /usr/local/bin/docker-compose # docker-compose --version

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…

系统实现屏幕横竖屏切换

需求场景 机器默认横屏或者竖屏显示 -强制横竖屏显示 实现思路 旋转 uboot logo 和内核 logo旋转 Android 桌面旋转触摸 这个很好理解&#xff1a; uboot 内核 开机动画都是有界面的&#xff0c;旋转改变方向&#xff0c;同时提供新的横屏或者竖屏logo旋转桌面&#xff0c…