python onehot编码_机器学习入门:利用Python预测泰坦尼克生存情况

6a97bda7937649d96f6e7085a5b9d207.png

机器学习步骤:提出问题——理解数据——数据清洗——构建模型——模型评估——方案实施

1. 提出问题

本文通过使用Kaggle网站上的泰坦尼克生存数据信息,在Python中利用机器学习算法,来预测泰坦尼克号中不同乘客的存活率。

2. 理解数据

数据来源:Kaggle上面的泰坦尼克号项目

Titanic: Machine Learning from Disaster​www.kaggle.com

查看训练数据集和测试数据集分别有多少条数据和多少个变量,然后将训练数据集和测试数据集进行合并,方便同时对两个数据集进行清洗

55de5e903fc8aed7514edbe98826a866.png

查看数据前5行:

1009a0ac9a73ccaad60d4326fe60b907.png

309ff22dd003a3fcb71ba1076d27b38d.png

查看描述统计信息

04bf8632244d047f6650d1f7d81af447.png

使用desribe方法查看描述统计信息的缺点是只能查看到数值型数据的描述统计信息,对于其他类型的数据不显示,如字符串类型(姓名、客舱号等列的指标信息)

使用数据框的Info方法可以查看每一列的数据类型和数据总数

3ee85b40d8ab1ef0b7af8e984e34c1c2.png

根据分析结果可以看到哪些字段存在缺失数据的情况,为下一步的数据清洗指明方向

2.1 通过可视化理解数据

对生存整体情况进行分析,即本次沉船事件中,有多少人生存下来

50e4246f49e1a6742f6f50619fd8de2e.png

可以看到泰坦尼克上有超过60%的人遇难,选择使用饼图将其进行可视化

1cc83de9222abe1ff60b3a4ddf970020.png

将生存情况按性别分布进行可视化,首先按生存情况和性别分组

bc24368de3f9a4ce7d635d579934d964.png

然后将数据转换成DataFrame

977bee8ff27ebcfce7de5c34ca3d233e.png

计算遇难率和存活率,从结果看到女性81人遇难,占比约26%,男性468人遇难,占比约81%

8cd4afe3668627bc7459df7a033bcda6.png

将不同性别存活分布情况进行可视化

04ea037b93b57a161405d85e8b8c0af9.png

对所有家庭的家庭大小进行可视化,可以发现家庭大小主要集中在3人及以下的小家庭以及单身人士

9f04a5b171c1f4f87a865d70605b33d0.png

对所有人的年龄进行可视化,可以发现年龄间的差异是比较大的

1c7025e10bd718331693ba16dcce0d9f.png

通过使用散点图对年龄和生存情况之间的关系进行可视化,可以发现年龄和生存率相关性较弱

848044d65e697a78aed1c232ae790a47.png

3. 数据清洗

a. 数据预处理

选择子集——列名重命名——缺失数据处理——数据类型转换——数据排序——异常值处理

经过前面理解数据,只需要对缺失数据和异常值数据进行处理即可

1)缺失数据处理

数据类型缺失值处理:

使用fillna方法填充缺失数据,此案例中使用平均值来填充缺失数据

f36cd9b5f42e1d63b546eb1780ca6b32.png

2)字符串类型缺失值处理

将缺失值填充为最频繁出现的值:

5b319ce7e3d7b1b1faedfcae6db55459.png

船舱号字段中缺失数据比较多,因此将船舱号(Cabin)缺失值填充为U,表示未知(Unknown)

b79ac75d29622f8324255be6c7d027cf.png

b. 特征工程

f95a4afacb00a7d892679ab1fe3afa6d.png

a. 特征提取

9994bed88d8bf6cd83cb7359045f7b0d.png

onehot编码:如果原始数据中有N种类别,那就将这一个特征扩展为N种特征

1)分类数据特征提取:性别

使用map函数对一维数组Series每个数据应用自定义的函数计算

e2c91291dfeedc447eefad3a3715b98b.png

2)分类数据特征提取:登录港口

使用get_dummies进行one-hot编码

108718e6a59125fae02309d5c8742f53.png

3)分类数据特征提取:客舱等级

使用get_dummies进行one-hot编码

61444a062d8405d7bf6b889d477c8a16.png

4)分类数据特征提取:姓名

122a71b97a60e59f8aeb82a1269c885f.png

再使用map函数对Series每个数据应用自定义的函数计算,此处即为用map函数使这一列的值都使用getTitle函数得到对应姓名的头衔

8e629ac222bfefd283fb3217c82c0ba1.png

5)分类数据特征提取:客舱号

客舱号的首字母即为客舱的类别

5fcbe5392a2f454d4ed619776a3ee31a.png

使用get_dummies进行one-hot编码,列名前缀是Cabin。在过程中使用匿名函数语法简化函数。匿名函数语法为lambda参数1,参数2:函数体。在下面代码中,使用匿名函数lambda作获取到船舱号的首字母作为类别,然后用map函数使这一列的值都使用这个函数得到对应船舱号的首字母

792ecdf309a69df3aecfad8e0dc496ad.png

6)分类数据特征提取:家庭类别

第一步得到每个乘客自己的家庭人数是多少

乘客的家庭人数=同代直系亲属数(Parch)+不同代直系亲属数(SibSp)+乘客自己

54764bf94427432048a28f0d929c1e36.png

第二步使用匿名函数的条件判断建立家庭类别

bc3a0b1977efa8be82e1d182ee843386.png

b. 特征选择

选择哪些特征对预测生存情况有影响,可以提高模型的正确率,本次案例使用相关系数来筛选特征

第一步:使用数据框的corr方法得到相关系数矩阵,得到的是一个数据框

dde6a0d0328195935e48f2b7ea6ed2e2.png

第二步:将相关系数矩阵中的生存情况这一列提取出来,并对这一列进行降序排列

c0abbd7893f2230d0be29697545b32e7.png

将相关系数进行可视化,可以直观地看到各个特征与生存情况(Survived)是呈正相关还是负相关关系,以及各相关系数的大小。

dedf8aef9c30a47b029528d3a225b8f8.png

根据各个特征与生存情况(Survived)的相关系数大小,选择了这几个特征作为模型的输入:

头衔(titleDf)、客舱等级(pclassDf)、家庭大小(familyDf)、船票价格(Fare)、船舱号(cabinDf)、登船港口(embarkedDf)、性别(Sex)

3abe96000ce418bee5413a75b6d000b2.png

4. 构建模型

由于坦尼克号测试数据集是最后要提交给Kaggle的,里面没有生存情况的值,所以不能用于评估模型。因此:

  • 将Kaggle泰坦尼克号项目给的测试数据,叫做预测数据集(记为pred),也就是使用机器学习模型生成结果来对其生存情况进行预测。
  • 使用Kaggle泰坦尼克号项目给的训练数据集,做为原始数据集(记为source),从这个原始数据集中拆分出训练数据集(记为train:用于模型训练)和测试数据集(记为test:用于模型评估)。

1686d3af01499dc232687f093beaab58.png

泰坦尼克号预测生存率是一个二分分类问题,通过乘客的特征来预测乘客是生存还是死亡。在本次案例中,使用Python机器学习包sklearn的逻辑回归算法

建立模型用的训练数据集和测试数据集

6ac8b22373d42e896f39e1acae604bdd.png

训练模型构建:

1)导入算法

2)创建模型:逻辑回归(logistic regression)

3)训练模型

9656db71ce800c7c052d3a28e823cf77.png

5. 模型评估

测试数据查看模型准确率

8fdc4e05d341ba22c8348cf63f5867f7.png

模型准确率为82%,准确率尚可。

6. 方案实施

33422496ad8857e7835ee6f07e292a82.png

要上传至Kaggle,还需要将预测结果转换成csv文件

65160ebfa009d0591c24076e80bbddac.png

将预测结果上传到Kaggle即可看到分数和排名。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值