Kaggle Titanic 数据集

给定泰坦尼克号船上乘客的信息,设计一个算法模型来判断一名乘客在沉船灾难中能否最终存活下来

Link: https://www.kaggle.com/c/titanic

题目描述

泰坦尼克号(RMS Titanic)是英国白星航运公司下辖的一艘奥林匹克邮轮,在其处女航行中,因与一座冰山相撞而至沉船。在这次事故中,有约2/3的人丧生。现在给定泰坦尼克号船上的乘客信息,你需要学习一个模型来判断一名乘客在沉船灾难中能否最终存活下来。

小提示

  • 本题是一个典型的二分类问题
  • 先从train.csv中提取每个乘客的多项特征(feature)和存活信息(label),使用feature和label进行模型训练
  • 乘客的特征选取和处理比较重要。类别的特征,如Embarked、Pclass等,可以转换成one-hot encoding的表示形式。数值型的特征,如Age、Parch等可以进行范围标准化。一些很难处理和使用的特征,如Name等,可以考虑直接忽略
  • 模型可以使用传统的分类模型,如SVM,Decision Tree等。在训练过程中,要适当引入正则化项,防止模型过拟合,而致其泛化能力变差
  • 最后使用训练好的模型预测test.csv中的乘客最终能否存活

先修技能

  • 懂得基本的机器学习分类模型的原理和使用,如SVM,Decision Tree等。
  • 懂得集成学习的相关算法,如Random Forest,Adaboost等。

术语解释

  • SVM(支持向量机) : 是一种判别方法。在机器学习领域,支持向量机是一个监督学习模型,通常用来进行模式识别和分类
  • Decision Tree(决策树) : 是一种十分常用的机器学习方法。在机器学习领域,决策树是一个监督学习模型,他代表的是对象属性与对象值之间的一种映射关系,通常用来进行分类以及回归分析
  • 集成学习(Ensemble Learning) : 是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法
  • Random Forest(随机森林) : 指的是利用多棵树对样本进行训练并预测的一种分类器。在机器学习领域,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
  • Adaboost : 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

输入格式

数据文件train.csvtest.csv包含多名乘客的信息。每名乘客有如下信息:

  1. PassengerId : 乘客的唯一ID
  2. Survived : 乘客最终是否存活(0 = No, 1 = Yes, 仅train.csv中包含此信息)
  3. Pclass : 乘客的船票的等级(1 = 1st, 2 = 2nd, 3 = 3rd)
  4. Name : 乘客名字
  5. Sex : 乘客性别(male, female)
  6. Age : 乘客年龄(Year)
  7. Sibsp :船上兄弟姐妹/配偶的人数
  8. Parch : 船上父母/儿女的人数
  9. Ticket : 船票号码
  10. Fare : 船票价格
  11. Cabin : 船舱号
  12. Embarked : 出发港口(C = Cherbourg, Q = Queenstown, S = Southampton)

训练数据集train.csv包含12列,分别对应上述信息。测试数据集test.csv包含11列,不包含Survival信息。

输出格式

您需要提交一个submission.csv文件,文件应采用gender_submission.csv的格式,具体如下:对于测试集中的每位乘客,输出一行,其中包含PassengerId和预测这个乘客是否会存活的结果。 例如,如果您预测第一个乘客存活,第二个乘客不会存活,第三个乘客不会存活,那么您的提交文件将如下所示:

PassengerId,Survived
1,1
2,0
3,0 
(415 more lines)

评价

使用准确率(accuracy)作为最后评判标准。
准确率(accuracy)是用来衡量算法预测结果的准确程度,具体指测试集中算法预测正确的数量占总数的比例。

$$Accuracy=\frac{TP+TN}{TP+FN+FP+TN}$$

其中

TP,True Positive,将正类预测为正类的数目

FP,False Positive,将负类预测为正类数

TN,True Negative,将负类预测为负类数

FN,False Negative,将正类预测为负类数

代码与数据

完整代码

测评配置环境

python

pip install -U scikit-learn
pip install -U pandas

测评代码

import pandas as pd
from sklearn.metrics import accuracy_score
test = pd.read_csv(data_dir + "titanic_correct_submission.csv").sort_values('PassengerId')
pred = pd.read_csv(data_dir + "prediction_test.csv").sort_values('PassengerId')
accuracy = accuracy_score(test['Survived'],pred['Survived'])

results matching ""

    No results matching ""