本文介绍Kaggle入门比赛Titanic泰坦尼克号幸存预测的解题思路,使用的是神经网络和Tensorflow框架。提交代码附在本文的最后部分。
基本思路为:
- 导入数据集
- 对数据预处理
- 训练
- 预测并输出结果
一、入门介绍
1. 比赛介绍
Kaggle是一个数据建模和数据分析竞赛平台。
泰坦尼克号幸存预测是Kaggle上的一个入门级比赛,利于平台给的数据集,预测泰坦尼克号上不同乘客的幸存情况,并熟悉机器学习基础知识。
2. 板块介绍
比赛地址:Titanic - Machine Learning from Disaster
Titanic - Machine Learning from Disaster
https://www.kaggle.com/competitions/titanic
Kaggle的主页面如上,我们主要关注 Overview、Data 和 Submit Predictions 三个板块
- Overview: 比赛的基本介绍
- Data: 数据集的结构和字段介绍,在这里可以下载所需要的数据集
- Submit Predictions: 提交预测结果,并查看本次比赛的分数
其他板块如 Code 可以查看其他团队分享的代码,Discussion 是解题思路的分享,Leaderboard 是分数排行榜。
3. 平台提交流程
- 首先在 data 板块中点击“Download All”下载训练集和测试集
- 训练集附带真实结果,而测试集是用来做预测并提交结果
- 编写代码预测后,按照要求的格式在 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



被折叠的 条评论
为什么被折叠?



