文章目录

  • 一、建模基本流程
  • 二、结构化数据建模流程
    • 2.1 泰塔尼克号数据
    • 2.2 数据处理
    • 2.3 建立模型
    • 2.4 训练模型
    • 2.5 评估模型
    • 2.6 模型预测
    • 27 保存模型

一、建模基本流程

  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,layerstf.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)


可以回到文件夹,看保存的模型文件:

欢迎关注我的公众号:

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

  1. springboot+dubbo+redis+RabbitMQ 项目整合实例【附完整源码】

    往期精选 ●  卸磨杀驴!程序员心中的悲愤与无奈 ●  2018.06.27阿里云宕机50分钟 ●  程序员/架构师/技术经理/技术总监是干什么的 ●  记一次内存溢的出分析经历--带给我的痛苦 ●  ...

  2. 实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据

    首先需要豆瓣Top250影评的语料,我用Scrapy抓取了5w份语料,用于训练与验证. 豆瓣影评爬虫 github.com/3inchtime/d- 有了语料之后我们就可以开始实际开发了. 这里建议使 ...

  3. RCNN学习笔记——第三篇: 实现FRCNN网络训练、评价与预测(附全部源码)

    RCNN学习笔记--第三篇: 实现FRCNN网络训练.评价与预测(附全部源码) 本文是个人根据B站大佬Bubbliiiing的FRCNN系列视频同步完成FRCNN训练,记录心得和遇见的问题. 关于RC ...

  4. 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java

    物联网之java实现(springboot + netty + 心跳,附完整源码) 10年的软件行业从业经验,熟悉java开发.java 架构.微服务.自动化高级运维.压力测试等. 林忠明 ¥200. ...

  5. 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程

    知识图谱实战案例完全剖析(附完整源码和数据集)-2070人已学习 课程介绍         课程定位:系统学习知识图谱的佳实践: 系统学习:完全覆盖知识建模.图数据库.知识应用和知识获取: 实战指引: ...

  6. 微信小程序之授权登录(附完整源码)

    个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~ 个人博客地址:http://zwd596257180.gitee.io/blog/2019/04/15/wec ...

  7. 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)

    一.前言 本文是<自己动手开发智能聊天机器人完全指南(附完整源码)>的第二篇,也是21天实战人工智能系列<知识图谱完全项目案例剖析>里面的知识图谱应用的案例.前文中实现了一个最 ...

  8. H5 直播的疯狂点赞动画如何通过php直播平台源码实现(附完整源码)

    php直播平台源码H5 直播的疯狂点赞动画如何通过php直播平台源码实现(附完整源码) 直播有一个很重要的互动:点赞. 为了烘托直播间的氛围,直播相对于普通视频或者文本内容,点赞通常有两个特殊需求: ...

  9. Python实现恩尼格玛加密算法——附完整源码

    Python实现恩尼格玛加密算法--附完整源码 恩尼格玛是第二次世界大战中德国所使用的复杂电机械式密码机.它被认为是世界上最复杂的加密设备之一.在这个项目中,我们将使用Python模拟实现恩尼格玛加密 ...

  10. 打砖块小游戏php程序,javascript实现打砖块小游戏(附完整源码)

    小时候玩一天的打砖块小游戏,附完整源码 在?给个赞? 实现如图 需求分析 1.小球在触碰到大盒子上.左.右边框,以及滑块后沿另一方向反弹,在碰到底边框后游戏结束: 2.小球在触碰到方块之后,方块消失: ...

最新文章

  1. window下git的使用
  2. 各纬度气候分布图_读中国年平均气温分布图,寻找中国全年平均气温最高和最低的地方...
  3. linux学习笔记之--vim 程序编辑器
  4. [知识图谱构建] 二.《Neo4j基础入门》基础学习之创建图数据库节点及关系
  5. activeMQ,spring的jmstemplate简单例子
  6. mysql 内联和外联的区别_内联查询与外联查询
  7. C# 如何 保存对config文件的修改
  8. react 类暴露_react如何将组件内部的方法暴露给外部
  9. Linux -Docker
  10. am3352偶发上电不启动问题分析
  11. CentOS防火墙放行端口(以 8080 端口为例)
  12. 手机拍的视频后期怎么处理?视频大神的后期技巧,Vlog大片也能做
  13. Excel破解宏密码
  14. redis服务器cpu100%的原因和解决方案
  15. 白领最痛恨的四大发明
  16. Nginx地址重写功能
  17. 组态王bitset用法_组态王教程(基础入门篇).pdf
  18. (一)Redis常用数据类型及应用场景(Redis的解决方案汇总)
  19. 【初识太极】CAD用到的各种文件格式,你都知道吗?
  20. 关于运维,新华三的经验谈

热门文章

  1. stm32 ADC hal库实现
  2. 非计算机专业二级c语言,2017年计算机二级C语言基本知识
  3. Xmanager5 Passive 图形化界面安装时,界面出来之后鼠标点不了,鼠标点击无反应
  4. 终于在国庆前找到工作了!(面试全过程真实记录)
  5. 解读全球十大公司物联网战略,一个万物智能的世界即将到来
  6. 记录一次Win10莫名其妙被植入一个恶意软件
  7. Java 面试题看这些就够了
  8. node.js笔记第一天
  9. 伯通过计算机网络,用于互联的计算机网络的安全系统
  10. Prometheus监控系列一 | 安装部署及配置