Titanic 泰坦尼克号预测-Tensorflow 方法-【Kaggle 比赛】

本文介绍Kaggle入门比赛Titanic泰坦尼克号幸存预测的解题思路,使用的是神经网络和Tensorflow框架。提交代码附在本文的最后部分。

基本思路为:

  1. 导入数据集
  2. 对数据预处理
  3. 训练
  4. 预测并输出结果

一、入门介绍

1. 比赛介绍

        Kaggle是一个数据建模和数据分析竞赛平台。

        泰坦尼克号幸存预测是Kaggle上的一个入门级比赛,利于平台给的数据集,预测泰坦尼克号上不同乘客的幸存情况,并熟悉机器学习基础知识。

2. 板块介绍

Titanic比赛的主页-Kaggle
Titanic比赛的主页-Kaggle

比赛地址:Titanic - Machine Learning from Disaster

Titanic - Machine Learning from Disasterhttps://www.kaggle.com/competitions/titanic

Kaggle的主页面如上,我们主要关注 Overview、Data 和 Submit Predictions 三个板块

  • Overview: 比赛的基本介绍
  • Data: 数据集的结构和字段介绍,在这里可以下载所需要的数据集
  • Submit Predictions: 提交预测结果,并查看本次比赛的分数

其他板块如 Code 可以查看其他团队分享的代码,Discussion 是解题思路的分享,Leaderboard 是分数排行榜。

3. 平台提交流程

  1. 首先在 data 板块中点击“Download All”下载训练集和测试集
  2. 训练集附带真实结果,而测试集是用来做预测并提交结果
  3. 编写代码预测后,按照要求的格式在 Submit Predictions 上传结果,并查看本次提交的分数与排名

二、方法介绍

1.理解需求

比赛很简单:创建一个模型,预测哪些乘客在泰坦尼克号沉船中幸存下来。
下载下来的数据包括三个文件:训练集(train.csv), 测试集(test.csv), 提交示例(gender_submission.csv)

  • 训练集(train.csv):用于神经网络进行训练的数据集,包含真实结果列(Survival)
  • 测试集(test.csv):训练好模型后,用此文件中数据进行预测得到结果
  • 提交示例(gender_submission.csv):最终提交结果的格式示例,包含 PassengerId 和 Survived 两列

2.数据预处理

  • 可以用各种工具(pandas、Excel 和 Kaggle 自带表格等)分析训练集的数据,判断每一列的数据类型和是否有空缺等情况
  • 去除对结果不影响的列
  • 对空缺的单元进行填充

3.构建模型

  • 使用 keras 的 Sequence 模型
  • 隐藏层使用 relu 激活函数

4.模型评估

  • 使用 keras 的 compile, fit, evaluate 方法进行训练和评估
  • 使用 keras 的 predict 方法预测结果,并将结果按提交示例形成 csv 文件输出

三、编码过程

  • 首先在 data 板块中点击“Download All”下载训练集和测试集

1.导入数据 load_data

  • 使用 pandas 的 read_csv 方法,导入数据 load_data
# 提前将所有包引入
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.python.keras import activations
import matplotlib.pyplot as plt
from tensorflow.keras import regularizers
import datetime

# 导入数据
def load_data(path_url, test_path_url):
    raw_train_dataset = pd.read_csv(path_url)
    raw_test_dataset = pd.read_csv(test_path_url)
    return raw_train_dataset, raw_test_dataset

if __name__ == "__main__":
    # 1. 导入数据
    path_url = r"kaggle\titanic\train.csv"
    test_path_url = r"kaggle\titanic\test.csv"
    raw_train_dataset, raw_test_dataset = load_data(path_url, test_path_url)

2.数据预处理 preprocess

  • 首先我们确定数据集 features_test

    训练集 train.csv 中共包含 12 列,分别是 passengerId,survival,pclass,name,sex,Age,sibsp,parch,ticket,fare,cabin,embarked。

    通过分析可知对预测结果有影响的列为 Pclass,Sex,Fare,Age,SibSp,Parch,Embarked,而Survived为真实标签列。PassengerId在测试集中会用到。

    根据以上分析确定所需的列,形成features_test,将训练集裁剪为所需列。

  • 接下来对数据的缺失值进行填补

    用pandas的describe()和isnull().sum()方法可以对训练集进行数值统计,考虑以中位数来替代缺失值。其中缺失较多的列为Age和Fare列。

  • 数据类型统一为数字编码
    考虑Sex和Embarked列是字符串,将其修改为每一个可能性字符单独一列,并去除原列。

  • 归一化输入(标准化)
    第一步是零均值化,每个训练数据𝑥减去均值𝜇。第二步是归一化方差。

  • 分别处理训练集和测试集
    对于训练集,我们要把Survived列单独提出来作为标签,即真实值。

    对于测试集,对比提交示例(gender_submission.csv)文件,我们保留PassengerId列作为索引id。

# 数据预处理的基础方法
def preprocess(raw_dataset, features, train=True):
    """用于predict的数据预处理
    Args:
        input: dataset = pandas.DataFrame对象
    """
    # 以中位数来替代
    if "Age" in features:
        raw_dataset["Age"].fillna(raw_dataset["Age"].median(), inplace=True)
    raw_dataset["Fare"].fillna(raw_dataset["Fare"].median(), inplace=True)
    # Embarked也可以为最多值
    raw_dataset["Embarked"].fillna(raw_dataset["Fare"].median(), inplace=True)
    dataset = raw_dataset[features]
    dataset = dataset.copy()

    # 由于 embarked=登船港口, Port of Embarkation	
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值