【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)



一、设计要求

背景描述

Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习!

泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存者有一些运气因素,但有些人比其他人更容易存活下来,究竟有哪些因素影响着最终乘客的生存与否呢?

数据说明

在该数据集中,共包括三个文件,分别代表训练集测试集以及测试集的答案

数据描述:

变量名称PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
变量解释乘客编号是否存活船舱等级姓名性别年龄兄弟姐妹和配偶数量父母与子女数量票的编号票价座位号登船码头
数据类型numericcategoricalcategoricalStringcategoricalcategoricalnumericnumericstringnumericstringcategorical

:以上数据类型均为经过预处理后的数据类型!

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈


二、设计思路

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈

1. 数据预处理

实现思路:
在机器学习模型的训练和预测之前,数据预处理是一个关键步骤。其目的是将原始数据转化为适合模型输入的形式,同时尽量减少数据中的噪声和异常值对模型性能的影响。
缺失值填补:代码中使用了SimpleImputer将缺失的年龄和票价数据用中位数填补,因为中位数对异常值的鲁棒性较好。另外,Embarked缺失值使用众数进行填补,因为这是一种分类变量,众数是最常见的值。
类别变量编码:SexEmbarked是类别变量,在机器学习模型中需要将其转化为数值形式。代码中使用LabelEncoder对这些变量进行编码,转化为整数值,以便模型能够处理。
特征选择与删除:代码删除了诸如PassengerId, Name, Ticket, Cabin等对生存预测无显著作用的特征。这些特征可能与目标变量Survived的关系不大,或者是因为它们具有高基数(如名字、票号),无法为模型提供有用的模式识别信息。

# 数据预处理
def preprocess_data(df):
    # 缺失值填补
    imputer = SimpleImputer(strategy='median')
    df['Age'] = imputer.fit_transform(df[['Age']])
    df['Fare'] = imputer.fit_transform(df[['Fare']])
    df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

    # 类别变量编码
    
    # 此处 略至少10行代码...
    # 此处 略至少10行代码...
    # 此处 略至少10行代码...
    
    return df

# 预处理训练数据和测试数据
train_data = preprocess_data(train_data)
test_data = preprocess_data(test_data)

2. 训练集与验证集的分割

实现思路:
为了评估模型的性能,数据被分割为训练集和验证集。train_test_split函数用于将数据集分为训练集(80%)和验证集(20%)。训练集用于训练模型,验证集用于在训练过程中监控模型性能,以防止过拟合。
标准化:使用StandardScaler将特征标准化,使其均值为0,标准差为1。这对于一些基于距离的算法(如SVM)非常重要,同时对随机森林等其他算法也有助于提高模型的训练效果。

# 分割训练集和验证集
X = train_data.drop('Survived', axis=1)
y = train_data['Survived']


# 此处 略至少10行代码...
# 此处 略至少10行代码...
# 此处 略至少10行代码...

X_val = scaler.transform(X_val)
test_data = scaler.transform(test_data)

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈

3. 模型训练

实现思路:
代码选择了RandomForestClassifier作为模型。随机森林是一种集成学习方法,它通过构建多个决策树,并将其预测结果进行平均来减少单个决策树的过拟合问题,从而提高模型的泛化能力。
在训练过程中,模型使用训练集数据进行拟合,构建了一组决策树,并在这些树的基础上形成了一个随机森林。

# 训练随机森林模型
# 此处 略至少10行代码...
model.fit(X_train, y_train)

4. 模型预测与评估

实现思路:
预测:在验证集上,使用训练好的随机森林模型进行预测,得到预测的生存情况(Survived)。
评估:模型性能通过计算准确率和生成分类报告来评估。准确率衡量了模型预测正确的比例,而分类报告提供了更加详细的性能指标,如精确度、召回率和F1-score。这些指标有助于更全面地了解模型在不同类别上的表现。
测试集预测:最终,模型对测试集数据进行预测,并生成预测结果文件submission.csv,用于提交。

# 预测
y_pred = model.predict(X_val)

# 评估模型
accuracy = accuracy_score(y_val, y_pred)
print(f'Validation Accuracy: {accuracy}')
print('Classification Report:')
print(classification_report(y_val, y_pred))

# 在测试集上进行预测
test_pred = model.predict(test_data)

# 保存预测结果
# 此处 略至少10行代码...
# 此处 略至少10行代码...
print('Predictions saved to submission.csv')

5. 特征重要性分析

实现思路:
代码计算了每个特征在随机森林模型中的重要性。特征重要性反映了每个特征对模型决策过程的贡献,通过绘制柱状图,可以直观地看到哪些特征对预测生存情况具有较大的影响。这对于特征工程和模型优化具有重要意义。

# 绘制特征重要性图
feature_importances = pd.Series(model.feature_importances_, index=X.columns)
# 此处 略至少10行代码...
# 此处 略至少10行代码...
plt.title('Top 10 Feature Importances')
plt.show()

通过这些代码块,可以将每个模块的实现思路具体化,帮助你更好地理解整个数据处理、模型训练、预测及评估过程。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈


三、可视化分析

生存状态与客舱等级的关系

图形内容:这个柱状图展示了在不同的船舱等级(Pclass)下,乘客的生存与否(Survived)的分布情况。
含义:通过比较不同Pclass的乘客生存和未生存的数量,可以看出在不同船舱等级中生存率的差异。较高的Pclass(如Pclass 1)的乘客可能生存率更高。
在这里插入图片描述

生存比例

图形内容:这个饼状图展示了整个数据集中乘客生存和未生存的比例。
含义:通过查看生存与未生存的比例,可以直观地理解数据集中生存率的整体情况。

在这里插入图片描述

年龄与生存状态的关系

图形内容:这个折线图展示了不同年龄段乘客的生存状态分布情况。
含义:折线图帮助分析不同年龄的乘客的生存概率。例如,某些特定年龄段的乘客可能生存概率较高或较低。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈

在这里插入图片描述

票价与年龄的关系

图形内容:这个散点图展示了乘客的票价(Fare)与年龄(Age)之间的关系,并根据生存状态(Survived)进行区分。
含义:通过这个图表,可以看到票价和年龄如何相互关系,并且生存和未生存的乘客在这些变量上的分布是否有明显的不同。

在这里插入图片描述

相关性热图

图形内容:热力图展示了数值特征之间的相关性矩阵。
含义:热力图用于识别不同变量之间的相关性。颜色越深表示相关性越强,正相关和负相关均可通过颜色深浅识别。这个图表有助于找到哪些特征之间存在显著的线性关系。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈

在这里插入图片描述

不同客舱等级下乘客的年龄与票价的分布

图形内容:左侧的箱线图展示了不同Pclass中乘客年龄(Age)在生存与否(Survived)下的分布情况;右侧的小提琴图展示了不同Pclass中乘客票价(Fare)在生存与否下的分布情况。
含义:箱线图帮助理解在不同Pclass和生存状态下年龄的中位数、四分位范围以及异常值的分布情况;小提琴图则结合了箱线图和密度图的优点,可以更清晰地看出票价分布的形态和生存状态的关系。

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值