建立深度学习模型对 Titanic 数据进行预测

之前,我们已经对泰坦尼克号乘客数据进行充分的分析,并通过数据的可视化可以清楚地知道如下特征:

  • 女性和儿童幸存率最高;
  • 成年男性幸存率最低;
  • 头等舱的乘客幸存率高,而低等舱的乘客幸存率低,即票价贵的乘客幸存率高;
  • 有配偶和亲属的乘客,幸存率低;

知道这些特征,我们可以使用传统的机器学习算法,比如逻辑回归或者支持向量机可以以很高的精确度进行预测。今天,我们使用深度学习框架,建立自己的神经网络模型,进行乘客幸存率预测!

深度学习框架我们使用 tflearn ,这个框架是对 tensorflow 的高层次 API 封装,非常适合研究人员使用,建议对数据科学以及医学研究的小伙伴们可以用它来练手,个人推荐深度学习入门的必备框架之一。

原始乘客数据经过重新整理,格式如下:

引入相关库:

import numpy as np
import tflearn

将首列 survived 作为标签列,按值把整个数据集进行分类,并读入相关变量中:

data, labels = load_csv('titanic_dataset.csv', target_column=0, categorical_labels=True, n_classes=2)

建立一个3层全连接神经网络,输入维度为6,即:性别、年龄、船舱等级、有无配偶、有无父母、票价,每层有32个神经元,激励函数使用非线性的 softmax,输出层为逻辑回归。创建好模型后,feed 数据:

model = tflearn.DNN(net)
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)

看到如下 training 信息,而且 acc 值经过每次迭代后都在增加,说明模型创建正常:

Run id: BMC1IQ
Log directory: /tmp/tflearn_logs/
INFO:tensorflow:Summary name Accuracy/ (raw) is illegal; using Accuracy/__raw_ instead.
---------------------------------
Training samples: 1309
Validation samples: 0
--
Training Step: 1 | time: 0.188s
| Adam | epoch: 001 | loss: 0.00000 - acc: 0.0000 -- iter: 0016/1309
Training Step: 2 | total loss: 0.62606 | time: 0.194s
| Adam | epoch: 001 | loss: 0.62606 - acc: 0.2250 -- iter: 0032/1309
Training Step: 3 | total loss: 0.68283 | time: 0.197s
| Adam | epoch: 001 | loss: 0.68283 - acc: 0.3989 -- iter: 0048/1309
.....
.....

接下来,我们来验证这个模型对幸存率的预测,创建两个新乘客:

TheMan = [3, 'Tom', 'male', 18, 0, 0, 5.000]  # 三等舱,男,18岁,无配偶,无父母,票价5元
TheWoman = [1, 'Susan', 'female', 22, 1, 2, 100.0000]  # 头等舱,女,22岁,有配偶,有父母,票价100元

对上述数据进行处理,譬如将性别映射为0和1,去掉不必要的特征,譬如姓名和票号等,以便输入给 model:

def preprocess(passengers, columns_to_delete):
   for column_to_delete in sorted(columns_to_delete, reverse=True):
      [passenger.pop(column_to_delete) for passenger in passengers]
   for i in range(len(passengers)):
       passengers[i][1] = 1. if passengers[i][1] == 'female' else 0.
   return np.array(passengers, dtype=np.float32)

进行预测:

to_ignore = [1, 6]  # 去掉 name 和 ticket 特征
TheMan, TheWoman = preprocess([TheMan, TheWoman], to_ignore)

pred = model.predict([TheMan, TheWoman])
print("TheMan Surviving Rate is:", pred[0][1])
print("TheWoman Surviving Rate is:", pred[1][1])

输出为:

TheMan Surviving Rate is: 0.0733283
TheWoman Surviving Rate is: 0.870055

与前篇的数据分析结果一致,三等舱的男性幸存率极低!!!

建立深度学习模型对 Titanic 数据进行预测

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部