学习机器学习的小伙伴,在入门的时候可以通过相对赶紧简单和干净的数据入门。 最常用的数据集就是我在之前写的MNIST,波士顿房价,还有今天要给大家介绍的泰坦尼克号生存预测问题。
泰坦尼克号的故事背景大家一定都非常熟悉了,下面我们一起来探索一下相关数据,以及看看如何用机器学习的方法进行分类预测。
数据加载
本数据也是Kaggle平台的入门数据之一,可以同Kaggle平台下载训练数据和测试数据,这个竞赛项目也是长年开放的,大家也可以将自己的预测结果上传到Kaggle上。
https://www.kaggle.com/c/titanic/data
import pandas as pd
train_data = pd.read_csv("train.csv")
#预览一下数据
train_data.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
print(train_data.shape)
(891, 12)
train_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
#可以看到有一些列 比如Cabin,Age有非常多的缺失值
缺失值处理
泰坦尼克号的数据预处理有两点非常值得大家练手,首先就是缺失值处理,可以看到Cabin和Age是有相当多的缺失值的。
缺失值常见处理方式:
- 如果缺值的样本占总数比例极高,可以直接舍弃了,否则作为特征可能会有带来噪声,影响结果
- 如果缺值的样本数适中,且该特征是非连续值(离散),可以把NaN作为一个类别Category,加到类别特征中
- 如果缺值的样本数适中,且该属性为连续值,可以考虑给定一个step(比如这里的age,可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个category加类别特征中
- 有些情况下,缺失的值个数并不是特别多,那我们也可以试着根据已有的值,拟合一下数据,补充上
处理Cabin缺失值
在决定处理之前不妨先看一下Cabin分布情况。
Cabin = train_data['Cabin']
Cabin.value_counts()
B96 B98 4
C23 C25 C27 4
G6 4
E101 3
D 3
..
F38 1
C50 1
A5 1
C91 1
E63 1
Name: Cabin, Length: 147, dtype: int64
可以看到Cabin的值比较分散,Cabin值基本出现不大于4次,很多都只出现一次。
下面看一下Cabin的有无对Survive与否的影响。
import matplotlib.pyplot as plt
%matplotlib inline
fig