作者 | 刘早起
翻译/编辑 | 早起Python
来源 | 早起Python(ID:zaoqi-python)
很多同学在学习机器学习时往往掉进了不停看书、刷视频的,但缺少实际项目训练的坑,有时想去练习却又找不到一个足够完整的教程,本项目翻译自kaggle入门项目Titanic金牌获得者的Kernel,该篇文章通过大家并不陌生的泰坦尼克数据集详细的介绍了如何分析问题、数据预处理、建立模型、特征选择、模型评估与改进,是一份不可多得的优秀教程。
本文在翻译的同时删减了部分介绍性文字,并对结构进行了调整方便大家阅读,由于篇幅原因,本篇文章中并没有包含大段的代码,仅保留过程与结果。建议在文末获取Notebook版本与数据集完整复现一遍,如果你正处于机器学习入门阶段相信一定会有所收获!
目录项目背景与分析
数据读入与检查
数据预处理
数据校正
缺失值填充
数据创建
数据转换
数据清洗
数据划分
探索性分析
建模分析
模型评估与优化
交叉验证
超参数调整
特征选择
模型验证
改进与总结
项目背景与分析
泰坦尼克号沉没是历史上有名的沉船事件之一。1912年4月15日,在泰坦尼克号的首次航行中,与冰山相撞后沉没,使2224名乘客和机组人员中的1502人丧生。这一耸人听闻的悲剧震惊了国际社会。
沉船事故导致人员丧生的原因之一是没有足够的救生艇供乘客和船员使用。尽管在下沉中幸存有一定的运气,但某些群体比其他群体更可能生存,例如妇女,儿童和上层阶级。
在这个项目中,我们被要求完成对可能生存的人群的分析,并使用机器学习工具来预测哪些乘客可以幸免于悲剧。
数据读取与检查
首先导入与数据处理相关的库,并检查版本与数据文件夹
#导入相关库
import sys
print("Python version: {}". format(sys.version))
import pandas as pd
print("pandas version: {}". format(pd.__version__))
import matplotlib
print("matplotlib version: {}". format(matplotlib.__version__))
import numpy as np
print("NumPy version: {}". format(np.__version__))
import scipy as sp
print("SciPy version: {}". format(sp.__version__))
import IPython
from IPython import display
print("IPython version: {}". format(IPython.__version__))
import sklearn
print("scikit-learn version: {}". format(sklearn.__version__))
import random
import time
#忽略警号
import warnings
warnings.filterwarnings('ignore')
print('-'*25)
# 将三个数据文件放入主目录下
from subprocess import check_output
print(check_output(["ls"]).decode("utf8"))
接下来导入与建模预测相关的库
#导入建模相关库
from sklearn import svm, tree, linear_model, neighbors, naive_bayes, ensemble, discriminant_analysis, gaussian_process
from xgboost import XGBClassifier
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn import feature_selection
from sklearn import model_selection
from sklearn import metrics
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
import seaborn as sns
from pandas.tools.plotting import scatter_matrix
#可视化相关设置
%matplotlib inline
mpl.style.use('ggplot')
sns.set_style('white')
pylab.rcParams['figure.figsize'] = 12,8
现在来读取并对数据做一个初步的预览,我们使用info()和sample()函数来快速概览变量数据类型。
data_raw = pd.read_csv('train.csv')
data_val = pd.read_csv('test.csv')
data1 = data_raw.copy(deep = True)
data_cleaner = [data1, data_val]
print (data_raw.info())
data_raw.sample(10)
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.6+ KB
None
存活变量是我