本文前部分参考简书:https://www.jianshu.com/p/06c2ee7e5c68
后半部分对比逻辑回归,随机森林、XGBOOST常见算法的分类准确度。
概述
1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难。沉船导致大量伤亡的原因之一是没有足够的救生艇给乘客和船员。虽然幸存下来有一些运气因素,但有一些人比其他人更有可能生存,比如妇女,儿童和上层阶级。在本文中将对哪些人可能生存作出分析,特别是运用Python和机器学习的相关模型工具来预测哪些乘客幸免于难,最后提交结果。从kaggle泰坦尼克生存预测项目下载相关数据。
实施步骤
主要步骤
1.提出问题
什么样的人在泰坦尼克号中更容易存活?
2.理解数据
2.1 采集数据
从Kaggle泰坦尼克号项目页面下载数据:https://www.kaggle.com/c/titanic
获取数据
2.2 导入数据
#导入处理数据包
import numpy as np
import pandas as pd
#导入数据
#训练数据集
train = pd.read_csv('E:\kaggle\\train.csv')
#测试数据集
test = pd.read_csv('E:\kaggle\\test.csv')
print ('训练数据集:',train.shape,'测试数据集:',test.shape)
rowNum_train=train.shape[0]
rowNum_test=test.shape[0]
print('kaggle训练数据集有多少行数据:',rowNum_train,
',kaggle测试数据集有多少行数据:',rowNum_test,)
#合并数据集,方便同时对两个数据集进行清洗
full = train.append( test , ignore_index = True )
print ('合并后的数据集:',full.shape)
2.3 查看数据集信息
#查看数据
full.head()
#获取数据类型列的描述统计信息
full.describe()
describe只能查看数据类型的描述统计信息,对于其他类型的数据不显示
# 查看每一列的数据类型,和数据总数
full.info()
我们发现数据总共有1309行。
其中数据类型列:年龄(Age)、船舱号(Cabin)里面有缺失数据:
1)年龄(Age)里面数据总数是1046条,缺失了1309-1046=263,缺失率263/1309=20%
2)船票价格(Fare)里面数据总数是1308条,缺失了1条数据
字符串列:
1)登船港口(Embarked)里面数据总数是1307,只缺失了2条数据,缺失比较少
2)船舱号(Cabin)里面数据总数是295,缺失了1309-295=1014,缺失率=1014/1309=77.5%,缺失比较大
这为我们下一步数据清洗指明了方向,只有知道哪些数据缺失数据,我们才能有针对性的处理。
3.数据清洗
3.1 数据预处理
缺失值处理
在前面,理解数据阶段,我们发现数据总共有1309行。 其中数据类型列:年龄(Age)、船舱号(Cabin)里面有缺失数据。 字符串列:登船港口(Embarked)、船舱号(Cabin)里面有缺失数据。这为我们下一步数据清洗指明了方向,只有知道哪些数据缺失数据,我们才能有针对性的处理。很多机器学习算法为了训练模型,要求所传入的特征中不能有空值。
- 如果是数值类型,用平均值取代
- 如果是分类数据,用最常见的类别取代
- 使用模型预测缺失值,例如:K-NN
print('处理前:')
full.info()
#年龄(Age)
full['Age']=full['Age'].fillna( full['Age'].mean() )
#船票价格(Fare)
full['Fare'] = full['Fare'].fillna( full['Fare'].mean() )
print('处理红后:')
full.info()