TensorFlow2.9泰坦尼克号生存预测—结构化数据建模流程

Posted wx62a0461bcb0eb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow2.9泰坦尼克号生存预测—结构化数据建模流程相关的知识,希望对你有一定的参考价值。


文章目录

一、建模基本流程

  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号撞击冰山沉没后能否生存。

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_json


共有 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)

如下:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_json_02


利用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()

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_json_03


年龄分布情况

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)

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_tensorflow_04


数据描述

df1.describe()

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_机器学习_05


查看缺失值数量

df1.isnull().sum()

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_06


编码处理:

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)

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_07

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

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_json_08

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)

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_09


获取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()

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_权重_10

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 #分割一部分训练数据用于验证
)

如下:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_tensorflow_11

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")

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_tensorflow_12

plot_metric(history,"auc")

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_机器学习_13


基本准确度评估:

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

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_权重_14

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)

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_json_15

27 保存模型

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

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

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

如图:

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_16


保存模型结构:

# 保存模型结构
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)

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_机器学习_17


以上会选择一个就行。

第二种: 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)

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_18


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

【TensorFlow2.9】泰坦尼克号生存预测—结构化数据建模流程_python_19

欢迎关注我的公众号:


以上是关于TensorFlow2.9泰坦尼克号生存预测—结构化数据建模流程的主要内容,如果未能解决你的问题,请参考以下文章

决策树算法泰坦尼克号乘客生存预测

机器学习决策树算法泰坦尼克号乘客生存预测

机器学习决策树算法泰坦尼克号乘客生存预测

泰坦尼克号生存预测分析

泰坦尼克号生存预测

Kaggle经典测试,泰坦尼克号的生存预测,机器学习实验----02