sklearn 相关性分析_用sklearn机器学习预测泰坦尼克号生存概率

前言

  • 本文为练手记录,适用于刚入门的朋友参照阅读练习,大神请绕道,谢谢!
  • 阅读大约需要10分钟。

一、理解项目概况并提出问题

1.1 登陆官网查看项目概况

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

变量解释:

722f80142339c40c73a7b5e81b16cbc0.png

1e62289812e484d75bc10560287ad663.png

下载三个数据集,测试数据,训练数据和预测数据。

1.2 整体思路

013fbe50c0a369379c50031f677f3b74.png

1.3 提出问题

1)有没有可能一些特定的人群如妇女儿童会比大多数人更容易存货?

2)不同等第仓存货概率是不是不同?

3)生存概率和年龄有关系吗?

4)生存概率会不会收到家庭成员多少的影响?

二、数据理解、准备

2.1 数据查看、合并

9c0b29081613b0c98421dd4001ae311a.png

首先我们通过pandas的read_.csv函数来导入两个csv然后用shape函数看看行列。

ebd4ee787d1cbce807d1b3465c26a534.png

通过train.append()来合并数据集。

合并的原因是因为训练数据特征要和测试数据特征一致。

我们发现测试数据集比训练数据集少一行是因为少了survive,这个参数是最后需要和预测数据集比对查看正确率的,所以会缺失。合并时忽略在appen参数加上ignore_index=True用NaN填充。

012081468fb7582cf3c41611ad7147da.png

合并成功

83e9cea669acd558f7f4d44b42a6dad3.png

我们通过describe()来查看数据类型的描述统计信息

f0135fca0f0351e50e22a4abd87f34cf.png

用info函数查看所有列的行,可以查看缺失情况,为进一步数据清洗做准备。

2.2 通过可视化理解数据

8cc6201f8b62e81a66ef2214d62fa37e.png

我们对所有人的年龄进行可视化,发现年龄差距比较大。

fb5527e7e81eb64c970773c17894c597.png

我们对相关系数进行可视化,可以明显的看出一些参数的正相关和负相关性大小,方便我们选取变量。

829548de5183d2805c71bbafdc5c9a82.png

我们也可以通过散点图发现年龄和生存率关系不是很大,和上图相关系数所呈现的信息保持一致。

三、数据清洗,准备

3.1 处理float64缺失值:Age,Fare

对于数值型数据我们直接用平均值填充

e9703877a436bb4b163a21d316bc652b.png
full['Age']=full['Age'].fillna(full['Age'.mean()])
full['Fare']=full['Fare'].fillna(full['Fare'.mean()])

3.2 处理object缺失:Cabin,Embarked

b2c2ff5e9d8a3b2b0ed245b797c4eb9c.png

用value_counts()函数来查看每个属性总和发现S最多,我们就用S填充

4840830835915512eaeaf91abe13c3c3.png

13d443091fd7a99cb2cb6785fc9736e8.png

发现还存在控制,我们用U来表示未知。

69f10ffab787616836f7a1d412ec1a52.png

用http://full.info()查看发现所有数据已经填充完毕

四、特征工程

数据分析当中核心就是提取数据特征,因为数据特征代表了和数据结果的联系。

4.1 对各个变量进行分类

0f609a17b87501c908278ec8486a00e1.png

而具体提取数据特征的步骤大致为:

0e9e09b0be04a06fa3ab7ea5d9019633.png

4.2 分类数据特征提取

分类数据主要有Sex,Cabin,Embarked,Pclass,Parch,SibSp,下面逐个清理。

1、性别

1b7865b01113997ccf530d5858b8f038.png

我们发现这里的性别是用male和female,我们要将其转换成0,1.

首先定义映射的字典,

sex_mapDic={'male':1,

'female':0}

通过map函数让每个数据进行自定义函数计算

full['Sex']=full['Sex'].map(sex_mapDict)

2、登陆港口Embarked

b61046307d276e44ee0aa3bc2f2ce4c7.png

我们首先用创建DataFrame()二维数据表,之后用get_dummies(full['Embarked',prefix='Embarked'])来进行one-hot编码存入二维表中。

(3)船舱等级Pclass

300aaad7ebd95ce1e80b7cade9c20718.png

客舱等级也是一样的步骤。

(4)船舱号Cabin

18dbbc1738d68684b4b85ee7e41eb5a0.png

这里有一个知识点是lambda函数

0efd229a490e24a49b13f562d1aadd49.png

直接定义:landba c:c[0]

代表输入c输出c[0] 非常简单粗暴

(5)Parch,SibSp数据

接下来处理Parch,SibSp数据,先理解下这两个数据是什么意思。

SibSp:表示船上兄弟姐妹数和配偶数量,理解为同代直系亲属数量,

Parch:表示船上父母数和子女数,理解为不同代直系亲属数量。

所以FamilySize等于=本人+sibsp+parch

9de2aa8cffc9c07ef623b62857fe8f7f.png

这里和前面不同的是,前面可以直接1 2 3 等仓用特征提取函数,这里要进行范围划分所以要自己产生列,然后用map函数映射修改。

且这里的lambda函数有所不同用到了一个if判断,写法是if为真结果放前面,为假else结果放后面。

lambda s :1 if s==1 else 0

e1e2a54ee54b7350da076e2ade8ac97a.png

合并后发现已经有33个特征了

4.3 字符串数据提取特征

e4b68955cd3fb4fc8f2bf5d18710166d.png

提取姓名的时候逗号前面是名字,逗号后面句号前面的是称谓所以我们要用split函数提取两次。

45d1cc91d6fa8663ca9d08bb47f3f800.png

定义一个函数同样用map映射批量修改

ac8947dcfb90fa1be82d16b5ba7e08b3.png

发现老外的称谓真的很多

697c87eb295caf71c3783fc12b301f97.png

定义数据字典,转换onehot,重复的工作挺多。

dd0e3db79089b34420bc7a8c116d3a78.png

五、获取特征相关性

5.1 获取corr矩阵

8b36e557d39721695c0c959ae147ff9f.png

因为我们最终结果要知道是否生存,所以看survived这一列的相关性即可。

515db4faf4ba72da60aca9236137d07a.png

发现方框内几列呈现正负相关性非常的强

0c694b958172186c1485c6f66f370654.png

于是乎我们组合这几列27个影响因子。

六、准备数据

82c0017070cb76b1904c30f51d043159.png

这里要清楚特征是我们提取的影响生存数的因素,标签是生存数。

预测数据集在891行之后要进行区分。

七、模型建立、训练

用sklearn的linear_model的逻辑回归算法建立模型,并开始用拆分好的数据进行训练:

b3b37becac826f8130e4ba65b6ab240a.png

可以看到我们把原始数据以28分,分成训练数据和测试数据。

716703ccd9a86dada6f28077ba8de67e.png

通过model.fit(train_x,train_y)进行训练

八、模型的评估、预测

8.1 模型正确率评估

46506b3d86a431e4cff00e67b430baa2.png

输入model.score(test_x,test_y) 输入测试特征和标签进行评估分数

8.2 用模型进行预测,并按要求输出

将前面准备的预测数据特征pre_x,用模型的predict方法预测生存数据pre_y,并整理成整数型int数据

c56386f2b37fd5d96e293df701101710.png

8.3 提交

1d3469100413a5a21f1e3c666dd9ca9a.png

提交后我们就会看到我们的排名和成绩

7333a0fc41577bac51fb15b50cdf49a0.png

泰坦尼克号这个competition很适合机器学习的入门,大家可以自己动手实操起来,看着鸭哥刚开始给的思维导图操练起来吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值