深度学习项目:泰坦尼克号生存预测【附完整源码】

这篇具有很好参考价值的文章主要介绍了深度学习项目:泰坦尼克号生存预测【附完整源码】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、建模基本流程

  1. 数据处理
  2. 建立模型
  3. 训练模型
  4. 评估模型
  5. 模型预测
  6. 保存模型

二、结构化数据建模流程

数据文件:

链接:https://pan.baidu.com/s/1H3QBVLPv4WeUnIYH92OKEA?pwd=wh77 
提取码:wh77 

2.1 泰塔尼克号数据

数据描述:
RMS 泰坦尼克号的沉没是历史上最为人熟知的海难事件之一。 1912 年 4 月 15 日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。

造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存下有一些运气因素,但有些人比其他人更容易存活下来,比如女人,孩子和上流社会。

在这个挑战中,要求完成哪些人可能存活下来的分析。特别的,要求运用机器学习工具来预测哪些乘客能够幸免于悲剧。titanic数据集的目标是根据乘客信息预测他们在Titanic号撞击冰山沉没后能否生存。
如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】
共有 11 个特征:

  • PassengerId: 乘客 ID
  • Pclass:乘客所持票类,有三种值(1,2,3) 【转换成onehot编码】
  • Name: 乘客姓名 【舍去】
  • Sex: 性别【转换成bool特征】
  • Age: 年龄(有缺失) 【数值特征,添加“年龄是否缺失”作为辅助特征】
  • SibSp: 在船上的兄弟姐妹/配偶个数【数值特征】
  • Parch: 在船上的父母/小孩个数【数值特征】
  • Ticket: 船票信息(字符串)【舍去】
  • Fare: 票价(浮点数,0-500不等) 【数值特征】
  • Cabin: 客舱(有缺失) 【添加“所在船舱是否缺失”作为辅助特征】
  • Embarked: 登船港口 (C = Cherbourg, Q = Queenstown, S = Southampton)。S、C、Q(有缺失)【转换成onehot编码,四维度 S,C,Q,nan】
  • Survived:0代表死亡,1代表存活【y标签】

2.2 数据处理

读取数据:

import pandas as pd 

dftrain_raw = pd.read_csv('train.csv')
dftest_raw = pd.read_csv('test.csv')
dftrain_raw.head(10)

如下:
深度学习项目:泰坦尼克号生存预测【附完整源码】
利用Pandas的数据可视化功能我们可以简单地进行探索性数据分析EDA(Exploratory Data Analysis):

import matplotlib.pyplot as plt
ax = dftrain_raw['Survived'].value_counts().plot(kind = 'bar',
     figsize = (12,8),fontsize=15,rot = 0)
ax.set_ylabel('Counts',fontsize = 15)
ax.set_xlabel('Survived',fontsize = 15)
plt.show()

深度学习项目:泰坦尼克号生存预测【附完整源码】
年龄分布情况

ax = dftrain_raw['Age'].plot(kind = 'hist',bins = 20,color= 'purple',
                    figsize = (12,8),fontsize=15)
ax.set_ylabel('Frequency',fontsize = 15)
ax.set_xlabel('Age',fontsize = 15)
plt.show()

删除不相关的两列:

df1=dftrain_raw.drop(['Name','Ticket'], axis=1)
df1.head(10)

深度学习项目:泰坦尼克号生存预测【附完整源码】
数据描述

df1.describe()

深度学习项目:泰坦尼克号生存预测【附完整源码】
查看缺失值数量

df1.isnull().sum()

深度学习项目:泰坦尼克号生存预测【附完整源码】
编码处理:

dfresult= pd.DataFrame()

dfPclass = pd.get_dummies(dftrain_raw['Pclass']) # 标准化
dfPclass.columns = ['Pclass_' +str(x) for x in dfPclass.columns ] # 列名
dfresult = pd.concat([dfresult,dfPclass],axis = 1)
dfresult 

深度学习项目:泰坦尼克号生存预测【附完整源码】

dfSex = pd.get_dummies(dftrain_raw['Sex']) #性别编码
dfresult = pd.concat([dfresult,dfSex],axis = 1)
dfresult

深度学习项目:泰坦尼克号生存预测【附完整源码】

dfresult['Age'] = dftrain_raw['Age'].fillna(0)
dfresult['Age_null'] = pd.isna(dftrain_raw['Age']).astype('int32')

dfresult['SibSp'] =dftrain_raw['SibSp']
dfresult['Parch'] = dftrain_raw['Parch']
dfresult['Fare'] = dftrain_raw['Fare']
dfresult['Cabin_null'] =  pd.isna(dftrain_raw['Cabin']).astype('int32')


dfEmbarked = pd.get_dummies(dftrain_raw['Embarked'],dummy_na=True)
dfEmbarked.columns = ['Embarked_' + str(x) for x in dfEmbarked.columns]
dfresult = pd.concat([dfresult,dfEmbarked],axis = 1)
dfresult

深度学习项目:泰坦尼克号生存预测【附完整源码】
获取x属性和y标签:

y= dftrain_raw['Survived'].values
y
x=dfresult

分割数据:

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=100)

2.3 建立模型

选择使用最简单的Sequential,按层顺序模型:

import tensorflow as tf 
from tensorflow.keras import models,layers

tf.keras.backend.clear_session()
model = models.Sequential()
model.add(layers.Dense(20,activation = 'relu',input_shape=(15,)))
model.add(layers.Dense(10,activation = 'relu' ))
model.add(layers.Dense(1,activation = 'sigmoid' ))
model.summary()

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】

2.4 训练模型

训练模型通常有3种方法,内置fit方法,内置train_on_batch方法,以及自定义训练循环。此处我们选择最常用也最简单的内置fit方法:

# 二分类问题选择二元交叉熵损失函数
model.compile(optimizer='adam',
            loss='binary_crossentropy',
            metrics=['AUC'])
history = model.fit(X_train,y_train,
                    batch_size= 64,
                    epochs= 30,
                    validation_split=0.2 #分割一部分训练数据用于验证
                   )

如下:
深度学习项目:泰坦尼克号生存预测【附完整源码】

2.5 评估模型

评估一下模型在训练集和验证集上的效果:

import matplotlib.pyplot as plt
def plot_metric(history, metric):
    train_metrics = history.history[metric]
    val_metrics = history.history['val_'+metric]
    epochs = range(1, len(train_metrics) + 1)
    plt.plot(epochs, train_metrics, 'bo--')
    plt.plot(epochs, val_metrics, 'ro-')
    plt.title('Training and validation '+ metric)
    plt.xlabel("Epochs")
    plt.ylabel(metric)
    plt.legend(["train_"+metric, 'val_'+metric])
    plt.show()
plot_metric(history,"loss")

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】

plot_metric(history,"auc")

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】
基本准确度评估:

model.evaluate(x = X_test,y = y_test)

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】

2.6 模型预测

预测前十个值:

model.predict(X_test[0:10])
#model(tf.constant(x_test[0:10].values,dtype = tf.float32)) #等价写法

预测类别:

import numpy as np
predictions = np.argmax(model.predict(X_test[:10]),axis=1)
predictions

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】

27 保存模型

可以使用Keras方式保存模型,也可以使用TensorFlow原生方式保存。前者仅仅适合使用Python环境恢复模型,后者则可以跨平台进行模型部署。因此推荐第二种方法。

第一种:
保存模型结构及权重:

# 保存模型结构及权重
model.save('keras_model.h5')  
del model  #删除现有模型
# 加载保存的模型
model = models.load_model('keras_model.h5')
model.evaluate(X_test,y_test)  # 评估

如图:
深度学习项目:泰坦尼克号生存预测【附完整源码】
保存模型结构:

# 保存模型结构
json_str = model.to_json()
# 恢复模型结构
model_json = models.model_from_json(json_str)

保存模型权重

#保存模型权重
model.save_weights('keras_model_weight.h5')
# 恢复模型结构
model_json = models.model_from_json(json_str)
model_json.compile(
        optimizer='adam',
        loss='binary_crossentropy',
        metrics=['AUC']
    )
# 加载权重
model_json.load_weights('keras_model_weight.h5')
model_json.evaluate(X_test,y_test)

深度学习项目:泰坦尼克号生存预测【附完整源码】
以上会选择一个就行。

第二种: TensorFlow原生方式保存

保存权重,该方式仅仅保存权重张量:

model.save_weights('tf_model_weights.ckpt',save_format = "tf")

保存模型结构与模型参数到文件,该方式保存的模型具有跨平台性便于部署:

model.save('tf_model_savedmodel', save_format="tf")
print('export saved model.')
model_loaded = tf.keras.models.load_model('tf_model_savedmodel')
model_loaded.evaluate(X_test,y_test)

深度学习项目:泰坦尼克号生存预测【附完整源码】
可以回到文件夹,看保存的模型文件:
深度学习项目:泰坦尼克号生存预测【附完整源码】

欢迎关注我的公众号:
文章来源地址https://www.toymoban.com/news/detail-483499.html

到了这里,关于深度学习项目:泰坦尼克号生存预测【附完整源码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 泰坦尼克号乘客生存情况预测分析2

    泰坦尼克号乘客生存情况预测分析1 泰坦尼克号乘客生存情况预测分析2 泰坦尼克号乘客生存情况预测分析3 泰坦尼克号乘客生存情况预测分析总 Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习! 泰坦尼克号轮船的沉没是历史上最为人熟知

    2024年04月27日
    浏览(34)
  • 速通——决策树(泰坦尼克号乘客生存预测案例)

    一、决策树 1、概述         树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果 2、建立过程         1. 特征选择:选取有较强分类能力的特征。         2. 决策树生成:根据选择的特征生成决策树。  

    2024年01月21日
    浏览(47)
  • 泰坦尼克号可视化数据分析报告

    上一节已经用用逻辑回归算法预测泰坦尼克号人员存活情况,但是不了解什么样的人容易存活;因此,用数据分析方法继续探究数据背后隐藏的秘密,并用数据可视化方法展示出来。 目录 提出问题 理解数据 采集数据 导入数据 查看数据 数据清洗 数据处理 幸存率与家庭类别

    2024年02月11日
    浏览(52)
  • 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】

    前言:泰坦尼克号,不只是卡梅隆导演的经典电影,它是一个真实存在的悲剧,也是电影的故事背景与题材。作为一个IT人,分析事实还得看数据,了解到泰坦尼克号沉船幸存者多为老人、小孩和妇女,而牺牲者多为年轻的男士,这样的历史数据,让我感受到了人性之美与善

    2024年02月02日
    浏览(48)
  • Kaggle实战入门:泰坦尼克号生还预测(进阶版)

    Kaggle实战入门:泰坦尼克号生还预测(基础版)对机器学习的全流程进行了总体介绍。本文继续以泰坦尼克号生还预测为例,对机器学习中的特征工程、模型构建进行深入解读。 数据集及代码下载 由于针对训练数据集、测试数据集均要做空值填充、编码转换、离散化、归一

    2024年02月02日
    浏览(39)
  • 基于用Hive泰坦尼克号乘客信息存储与分析

    实现以下任务: 创建数据库taitan 创建乘客信息表 导入数据到表中 统计获救与死亡情况 统计舱位分布情况 统计港口登船人数分布情况 统计性别与生存率的关系 统计客舱等级与生存率的关系 统计登船港口与生存率的关系 1.创建一个内/外部表,指定数据的存放路径。 (1)创建

    2024年02月06日
    浏览(49)
  • 极简sklearn-使用决策树预测泰坦尼克号幸存者

    泰坦尼克号幸存者数据集是kaggle竞赛中入门级的数据集,今天我们就来用决策树来预测下哪些人会成为幸存者。 数据集下载地址: https://download.csdn.net/download/ting4937/87630361  数据集中包含两个csv文件,data为训练用数据,test为测试集。 首先我们通过pandas来读取并查看数据 数据如

    2024年02月04日
    浏览(77)
  • 用决策树或随机森林解决泰坦尼克号乘客生存预测(内附数据集百度网盘)

     实现该模型的训练要用到的主要算法和实现思路是   首先的首先当然是导包啦   然后就是读取文件里面的数据进来了 数据集下载:百度网盘 链接:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw 提取码:ss5o   接着是进行对数据进行基本的处理了,以下是作者的处理方法: 第一步是

    2024年02月15日
    浏览(44)
  • 泰坦尼克沉船存活率(机器学习,Python)

    目录 1,实验要求: 2,报告内容 引言 数据处理 导入数据 查看数据集信息 数据清洗  特征工程 特征提取 特征选择 生还率预测说明 模型构建 建立训练数据集和测试数据集  选择不同的机器学习算法 训练模型,评估模型  方案实施 生存预测 参数调优 结论 改进方法 详细描

    2024年02月03日
    浏览(32)
  • Titanic 泰坦尼克数据集 特征工程 机器学习建模

    以下内容为讲课时使用到的泰坦尼克数据集分析、建模过程,整体比较完整,分享出来,希望能帮助大家。部分内容由于版本问题,可能无法顺利运行。 1   经典又有趣的 Titanic问题 1.1   目标 1.2   解决方法 1.3   项目目的 2   导入模块 3   加载数据 4   探索性数据分析

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包