Python 机器学习:泰坦尼克号获救预测_Titanic

问题

数据来源于Kaggle,通过一组列有泰坦尼克号灾难幸存者或幸存者的训练样本集,我们的模型能否基于不包含幸存者信息的给定测试数据集确定这些测试数据集中的乘客是否幸存。

代码与数据分析

导入必要的包和titanic数据

Python 机器学习:泰坦尼克号获救预测_Titanic_第1张图片

数据集基本信息

将数据分为不同类别,分别为类别型数据和数字型数据

  • 类别数据:Survived, Sex, and Embarked. Ordinal: Pclass
  • 数字型数据:Age, Fare. Discrete: SibSp, ParchPython 机器学习:泰坦尼克号获救预测_Titanic_第2张图片
    数据分布来看:
  • 大多数乘客(75%)没有和父母或孩子一起旅行
  • 近30%乘客有兄弟姐妹或配偶
  • 票价差异很大,只有少数乘客(<1%)支付了512美金的票价
  • 年龄较大的乘客数据较少(1%)

提出假设

  • 关联:各个特征与存货的相关性是如何
  • 填充缺失值:对 Age 和 Embarked 进行缺失值填充
  • 清洗、处理、剔除字段:Ticket由于高重复率,Cabin仓位空值过多,PassengerId与存活无关,Name数据不标准,都需要处理后进行剔除
  • 添加字段:我们可以根据 Parch 和 SibSp 创造一个关于家庭成员数量的字段;可以从名字中提取特征形成新特征;可以从 Age 和 Fare 创造分层,使数据更具有机器学习意义
  • 分类:猜测女性(Sex = female)、儿童(Age<自定义值)、上层人士(Pclass=1)更有可能存活

通过pandas pivot进行简单分析

Python 机器学习:泰坦尼克号获救预测_Titanic_第3张图片
Pclass 等级越低,存活率越低
在这里插入图片描述
女性存活率远高于男性
Python 机器学习:泰坦尼克号获救预测_Titanic_第4张图片
SibSp与存活率很分散,可能需要进行重构新字段

通过可视化进行分析

数据发现

  • 婴儿(Age < 4)存活率很高
  • 年龄最大的乘客存活了下来
  • 大多数15-25岁之间的乘客没有存活下来
  • 大多数乘客处于15-35岁之间

决策

通过对以上数据分析,可以得到以下决策

  • 我们应该对年龄进行缺失值填空、分层Python 机器学习:泰坦尼克号获救预测_Titanic_第5张图片

数据相关性

结合多个特征来识别相关性

数据发现

  • Pclass=3的乘客最多,但存活率最低
  • Pclass=2和Pclass=3的婴儿乘客幸存率很高
  • 大多数Pclass=1的乘客存活率很高
  • 不同阶层的年龄分布不同Python 机器学习:泰坦尼克号获救预测_Titanic_第6张图片

分类特征关联

数据发现

  • 女性存活率比男性高很多
  • Pclass=3的男性存活率更高
  • Pclass=3和男性乘客的生存率各不相同
    Python 机器学习:泰坦尼克号获救预测_Titanic_第7张图片

数值数据和分类数据的关系

数据发现

  • 票价越高的乘客存活率越高
  • 登陆口岸与乘客存活率相关Python 机器学习:泰坦尼克号获救预测_Titanic_第8张图片

数据处理

现在我们上文中的数据分析对数据进行处理

Name 列处理

名称列提取后发现分组较为集中和准确,进行简单处理就可以得到比较明确的类别
Python 机器学习:泰坦尼克号获救预测_Titanic_第9张图片
Python 机器学习:泰坦尼克号获救预测_Titanic_第10张图片
女性称谓的存活率也明显较高Python 机器学习:泰坦尼克号获救预测_Titanic_第11张图片
将类别数据(Title、Sex)数字化Python 机器学习:泰坦尼克号获救预测_Titanic_第12张图片Python 机器学习:泰坦尼克号获救预测_Titanic_第13张图片
删掉不必要的列Python 机器学习:泰坦尼克号获救预测_Titanic_第14张图片

填充空缺值

填充 Age

我们考虑用三种方法对Age进行空缺值填充

  1. 随机生成一个均值±方差之间的数字
  2. 在以上的分析中我们可以看到每个阶层、性别之间的年龄分布有所不同,所以我们可以根据阶层和性别组合特征进行空缺的年龄值预测
  3. 结合1、2方法,通过阶层和性别组合特征随机生成一个均值±方差之间的数字
    这里我们选择方法 2

生成年龄填充DataFrame

Python 机器学习:泰坦尼克号获救预测_Titanic_第15张图片

填充空缺 Age

根据每条空缺值的 Pclass 和 Sex 进行 Age 填充
Python 机器学习:泰坦尼克号获救预测_Titanic_第16张图片

对年龄进行分层

Python 机器学习:泰坦尼克号获救预测_Titanic_第17张图片

根据年龄分层将年龄类别数据数字化Python 机器学习:泰坦尼克号获救预测_Titanic_第18张图片

移除多余列

Python 机器学习:泰坦尼克号获救预测_Titanic_第19张图片

结合 SibSp 和 Parch 创建新列

Python 机器学习:泰坦尼克号获救预测_Titanic_第20张图片Python 机器学习:泰坦尼克号获救预测_Titanic_第21张图片

删除多余字段

Python 机器学习:泰坦尼克号获救预测_Titanic_第22张图片

结合阶层和年龄生成新列Python 机器学习:泰坦尼克号获救预测_Titanic_第23张图片

对 Embarked 列进行填充

由于绝大多数 Embarked=S,故用 S 对空缺值进行填充
Python 机器学习:泰坦尼克号获救预测_Titanic_第24张图片

对 Embarked 列类别数据数字化

Python 机器学习:泰坦尼克号获救预测_Titanic_第25张图片

对 Fare 列进行空缺值填充与分层

Python 机器学习:泰坦尼克号获救预测_Titanic_第26张图片

根据数据分层对 Fare 进行分类并数据化Python 机器学习:泰坦尼克号获救预测_Titanic_第27张图片

数据学习模型选择与评估

我们选择以下几种模型进行学习预测:

  • Logistic Regression
  • KNN or k-Nearest Neighbors
  • Support Vector Machines
  • Naive Bayes classifier
  • Decision Tree
  • Random Forrest
  • Perceptron
  • Artificial neural network
  • RVM or Relevance Vector Machine

进行训练集、预测集分割处理Python 机器学习:泰坦尼克号获救预测_Titanic_第28张图片

逻辑回归

逻辑回归主要原理是 Sigmoid 函数,是在工作流早期运行的一个有用模型。Logistic回归通过使用Logistic函数(累积Logistic分布)估计概率来度量分类因变量(特征)与一个或多个自变量(特征)之间的关系 Wikipedia。Python 机器学习:泰坦尼克号获救预测_Titanic_第29张图片
我们可以看到各个特征的的系数:

  • Sex 的系数为2.019,性别为1(female),存活率越大
  • Pclass系数为-1.046,值越大,存活率越低Python 机器学习:泰坦尼克号获救预测_Titanic_第30张图片

SVM模型Python 机器学习:泰坦尼克号获救预测_Titanic_第31张图片

KNN 模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第32张图片

朴素贝叶斯模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第33张图片

感知机模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第34张图片

支持向量机模型

在这里插入图片描述

梯度下降模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第35张图片

决策树模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第36张图片

随机森林模型

Python 机器学习:泰坦尼克号获救预测_Titanic_第37张图片

对所有模型进行评价分析

随机森林和决策树的分类效果都比较好,防止过拟合选择随机森林,进行 Kaggle 数据预测
Python 机器学习:泰坦尼克号获救预测_Titanic_第38张图片

Kaggle 预测数据上传

Kaggle 预测集准确率只有0.74641,排名9256名。如果对模型进行适当调参,模型准确性应该会更高
Python 机器学习:泰坦尼克号获救预测_Titanic_第39张图片
参考资料:Titanic

END

你可能感兴趣的:(数据分析,Python学习,机器学习)