TFlearn TensorFlow 实现泰坦尼克号生存率分析


# TFLearn - Quick Start 快速上手

"""
在本教程中,您将学习使用TFLearn和TensorFlow根据泰坦尼克号乘客的个人信息(如性别、年龄等)来评估乘客的生存可能性。
为了解决这一经典的机器学习任务,我们将构建一个深度神经网络分类器。
"""

# Prerequisite 必备前置条件

"""
确保安装了TensorFlow和TFLearn(the bleeding edge版本)。如果您不喜欢,请遵循以下说明。
http://tflearn.org/installation/#tflearn-installation
"""

# Introduction 背景介绍

"""
1912年4月15日,泰坦尼克号撞上冰山后沉没,2224名乘客和船员中1502人遇难。
虽然在沉船事故中幸存下来也有运气的因素,但一些群体比其他人更有可能幸存下来,比如妇女、儿童和上层阶级。
在本教程中,我们将分析这些人。
"""

# Dataset 数据集

"""
让我们来看看数据集(TFLearn将自动为您下载它)。为每位旅客提供以下资料:
VARIABLE DESCRIPTIONS:
survived        Survived
                (0 = No; 1 = Yes)
pclass          Passenger Class
                (1 = 1st; 2 = 2nd; 3 = 3rd)# 阶层划分很鲜明啊 手动狗头 三个等级
name            Name
sex             Sex
age             Age
sibsp           Number of Siblings/Spouses Aboard
parch           Number of Parents/Children Aboard
ticket          Ticket Number
fare            Passenger Fare

数据集里的样例:
survived	pclass	  name	                             sex	age	 sibsp	parch	ticket	    fare
1	           1	Aubart, Mme. Leontine Pauline	    female	24	  0	     0	    PC 17477	69.3000
1	           3	Baclini, Miss. Marie Catherine	    female	5	  2	      1	     2666	    19.2583
0	           3	Youseff, Mr. Gerious	             male	45.5  0	      0	     2628	    7.2250
我们的任务中有2类“未幸存”(类0)和“幸存”(类1),乘客数据有8个特征。
"""

# Build the Classifier 构建分类

"""
数据集存储在CSV文件中,因此我们可以使用TFLearn load_csv()函数将数据从CSV文件加载到python列表中。
我们指定了‘target_column’参数来指示我们的标签(存活与否)位于第一列(id: 0)。
"""

# 实战走起,盘他!
# An effective learning process should involve yourself in coding,running,testing,troubleshooting and bug-fixing.
# Let's get the ball rolling !!!


import numpy as np
import tflearn
# 下载数据集
from tflearn.datasets import titanic
titanic.download_dataset("titanic_dataset.csv")
# 加载CSV文件 首字段代表标签
from tflearn.data_utils import load_csv
data,label =load_csv("titanic_dataset.csv",target_column=0,categorical_labels=True,n_classes=2)

# Preprocessing Data 数据预处理

"""
数据是“按原样”给出的,需要一些预处理,以便在我们的深度神经网络分类器中使用。
首先,我们将丢弃那些不太可能对我们的分析有帮助的字段。
例如,我们假设“姓名”字段在我们的任务中不是很有用,因为乘客的姓名和他或她存活的机会可能不相关。
有了这样的想法,我们可以继续并抛弃'name'和'ticket'字段。
然后,我们需要将所有数据转换成数值,因为神经网络模型只能执行数字运算。
然而,我们的数据集包含一些非数值,如“name”和“sex”。因为'name'被丢弃了,
我们只需要处理'sex'字段。在这个简单的例子中,我们将把“0”分配给男性,把“1”分配给女性。
以下是预处理功能:
"""


def preprocess(passengers,columns_to_delete):
    # 按照id降序排列 删除字段
    for columns_to_delete in sorted(columns_to_delete,reverse=True):
        [passenger.pop(columns_to_delete) for passenger in passengers]
    for i in range(len(passengers)):
        # 将性别字段转为浮点型 1.表示幸存 0.表示溺亡
        # print (i)
        passengers[i][1] = 1. if data[i][1] == "female" else 0.
    return np.array(passengers, dtype=np.float32)

# 忽略name和ticket字段
to_ignore = [1,6]
data = preprocess(data, to_ignore)

# 构建深度神经网络

"""
我们正在使用TFLearn建立一个三层的神经网络。
首先,我们需要指定输入数据的形状。在我们的示例中,每个示例共有6个特性,我们将按批处理示例以节省内存。
因此,我们的数据输入形状是[None, 6] ('None'代表未知维度,因此我们可以更改批量处理的样本总数)。
"""
# 构建神经网络
net = tflearn.input_data(shape=[None,6])
net = tflearn.fully_connected(net,32)
net = tflearn.fully_connected(net,32)
net = tflearn.fully_connected(net,2,activation="softmax")
net = tflearn.regression(net)

# Training 训练

"""
TFLearn提供了一个模型包装器('DNN'),可以自动执行神经网络分类器任务,比如训练、预测、保存/恢复等。
我们将运行它的10个时代(即。,网络将看到所有数据10次)批量大小为16。
"""
# 定义模型
model = tflearn.DNN(net)
model.fit(data,label,n_epoch=10,batch_size=16,show_metric=True)

# output
"""
---------------------------------
Run id: MG9PV8
Log directory: /tmp/tflearn_logs/
---------------------------------
Training samples: 1309
Validation samples: 0
--
Training Step: 82  | total loss: 0.64003
| Adam | epoch: 001 | loss: 0.64003 - acc: 0.6620 -- iter: 1309/1309
--
Training Step: 164  | total loss: 0.61915
| Adam | epoch: 002 | loss: 0.61915 - acc: 0.6614 -- iter: 1309/1309
--
Training Step: 246  | total loss: 0.56067
| Adam | epoch: 003 | loss: 0.56067 - acc: 0.7171 -- iter: 1309/1309
--
Training Step: 328  | total loss: 0.51807
| Adam | epoch: 004 | loss: 0.51807 - acc: 0.7799 -- iter: 1309/1309
--
Training Step: 410  | total loss: 0.47475
| Adam | epoch: 005 | loss: 0.47475 - acc: 0.7962 -- iter: 1309/1309
--
Training Step: 492  | total loss: 0.51677
| Adam | epoch: 006 | loss: 0.51677 - acc: 0.7701 -- iter: 1309/1309
--
Training Step: 574  | total loss: 0.48988
| Adam | epoch: 007 | loss: 0.48988 - acc: 0.7891 -- iter: 1309/1309
--
Training Step: 656  | total loss: 0.55073
| Adam | epoch: 008 | loss: 0.55073 - acc: 0.7427 -- iter: 1309/1309
--
Training Step: 738  | total loss: 0.50242
| Adam | epoch: 009 | loss: 0.50242 - acc: 0.7854 -- iter: 1309/1309
--
Training Step: 820  | total loss: 0.41557
| Adam | epoch: 010 | loss: 0.41557 - acc: 0.8110 -- iter: 1309/1309
--
"""
"""
我们的模型完成训练的总准确率在81%左右,这意味着它可以预测81%的乘客的正确结果(幸存与否)。
"""

# Try the Model

"""
是时候试试我们的模型了。
为了好玩,让我们以《泰坦尼克号》的主角(迪卡普里奥和温斯莱特)为例,
计算一下他们幸存的几率(1级)。
"""
dicaprio =[3,"Jack Dawson","male",19,0,0,"N/A",5.0000]
winslet = [1,"Rose DeWitt Bukater","female",17,1,2,"N/A",100.0000]
# 处理数据
dicaprio,winslet = preprocess([dicaprio,winslet],to_ignore)
# 预测存活概率
pred = model.predict([dicaprio,winslet])
print("DiCaprio Surviving Rate:",pred[0][1])
print("Winslet Surviving Rate",pred[0][1])

# output
"""
DiCaprio Surviving Rate: 0.12640733
Winslet Surviving Rate 0.12640733

"""

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值