![dda063af66187c31205b8e9800f4264e.png](https://i-blog.csdnimg.cn/blog_migrate/486fb59612deffe9a4f4bc44e74a12a4.jpeg)
在kaggle 上下载泰坦尼克号数据,完成数据挖掘部分的作业。泰坦尼克号是许多数据科学和机器学习的新手比较喜欢选择的案例。
数据说明:
泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。 1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并导致了更好的船舶安全规定。
造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管幸存下沉有一些运气因素,但有些人比其他人更容易生存,比如女人,孩子和上流社会。
在这个任务中,我们对原始数据进行分析,看看到底哪些人更容易存活。然后用机器学习的工具来预测哪些乘客幸免于难。
数据导入:
![e1e7551ffdfdc1690b2b69845148ea31.png](https://i-blog.csdnimg.cn/blog_migrate/b8cdbcf187572971c75f1a0612201877.png)
显示前两行数据:
![88241e2229bf61f479f111809debbd03.png](https://i-blog.csdnimg.cn/blog_migrate/f84f4fbbbf9e0554f04f6a645e4f1df6.png)
一共有12个特征,其中5个特征是字符串。
用describe函数显示数据基本信息:
![65619a41f9b275753cdb2a990029b998.png](https://i-blog.csdnimg.cn/blog_migrate/03dd981c4fe5e68e5754a164bfa0c609.png)
可以看出与ID相比,年龄字段只有714个值,是有缺失的。
缺失只可以删除,插值,这里选择用平均值填充年龄:
![dbf1799e543b5cfa65a0e7dcecc8a203.png](https://i-blog.csdnimg.cn/blog_migrate/da570341ee0941ca27ade7895c13d82b.png)
查看性别类型,发现只有两类male、female,用0和1替代:
![61d63720ab5c0fb50c1e3e96ce81fc9b.png](https://i-blog.csdnimg.cn/blog_migrate/4b08648d3451bc88a42ef4e3a4c02432.png)
查看Embarked的情况,结果有S、C、Q、nan四类,说明有缺失值,查看数据,发现大多数都是S值,于是用S值填充缺失值。最后将字符串数值化。
![252ff83e6c1b75fb521c89d1290911cb.png](https://i-blog.csdnimg.cn/blog_migrate/3ba85a2c0e87ef3ecd1b598f19e1e4e4.png)
![8499cd8387dd1ed896326c91894bb15a.png](https://i-blog.csdnimg.cn/blog_migrate/9c3bfd8530b4d94409ba4bedaf36a959.png)
先选取'Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'七个特征进行建模,用python库sklearn进行预测,选取交叉检验:
![57b6fde99d11d7b26d601f2074fbbadd.png](https://i-blog.csdnimg.cn/blog_migrate/8c8f1630bcf34b8259ed54afa8759fdb.png)
线性模型:
![ad2b6087445afbc82ac8261e3a153a21.png](https://i-blog.csdnimg.cn/blog_migrate/c38bab434614f75220678333a759a5cd.png)
模型预测结果,准确率为26%,效果不好,比随便猜还差,随便猜也有50%的准确率。
逻辑回归:
![0f979cde94c6de3a4baec8fad7b9a1bf.png](https://i-blog.csdnimg.cn/blog_migrate/f78fc48842a9d291bff86f74c4432425.png)
准确率为78%,勉强过的去。
随机森林:
![0c09d679063108dee768b1c089177ad3.png](https://i-blog.csdnimg.cn/blog_migrate/acd9660ff8a6299fc7a7ee5e7d5d1503.png)
随机森林模型准确率也为78%
改变随机森林的参数:
![7512080ddb8c010962c3ba7a04fbfcb4.png](https://i-blog.csdnimg.cn/blog_migrate/2a76cb00b6bd64ac998e9cee5481ddec.png)
改变随机森林模型的参数后,模型的预测的准确率上升为82%,有明显的提升,说明在数据挖掘建模过程中,模型参数设置很重要。
在之前的建模过程中,利用现有的参数进行分析。在接下来,试着去尝试用新的特征向量来建立模型。
将原来的特征:SibSp、Parch合并为FamilySize,增加一个特征名字长度nameLength,好像在欧美,名字长度和社会地位有一定关系。
![ee35f5e911a6c10fd4d8ef19231b75c0.png](https://i-blog.csdnimg.cn/blog_migrate/15b13d9201e628e7ee7ea6d443d8ffa1.png)
增加一个名字称呼的变量Title,查看数据中的Title:
![079f228b4cb8a576e6606c57266de7f9.png](https://i-blog.csdnimg.cn/blog_migrate/9a2946cd85aa11de2cd198736ed44738.png)
后面8个比较少,考虑了一下,将'Lady', 'Countess','Capt', 'Col','Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'用rare取代。在将其数字化"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5。
![d26c03ce7c197feae90bb8f4108a5723.png](https://i-blog.csdnimg.cn/blog_migrate/bd9d6960f6b37a342c5c863bc0bd336b.png)
完成结果:
![7d4fc21684f95da3c9bcea2e30b65d2a.png](https://i-blog.csdnimg.cn/blog_migrate/2ba74655ba9a34ddac75f0683d47a44f.png)
将票价分为四类:
![d5a5fbb82caeacc504ee67f4a761bbb8.png](https://i-blog.csdnimg.cn/blog_migrate/299fac8aca0d4cf88edb58393f390548.png)
然后将票价用0、1、2、3取代,便于建模:
![484b7a7cf4d4f4c96d7a4bd4a1003570.png](https://i-blog.csdnimg.cn/blog_migrate/ee53c0558b6be727eea6bc631fba093e.jpeg)
同样的操作,将年龄分类,在用数字代替:
![8efd202a51fde37521e5104bc07e9340.png](https://i-blog.csdnimg.cn/blog_migrate/67a018277710acf379bb065e48dcbd8e.png)
![3a33e6c7a4c4284bdde2b06350191f6c.png](https://i-blog.csdnimg.cn/blog_migrate/75c0954192f16d3561ba63b6e4a11cd2.png)
处理结果:
![65243de7bc6da9f2e8d33ba3ab3e4e47.png](https://i-blog.csdnimg.cn/blog_migrate/9c0be94ee0861140b284f39269fc914c.png)
重新选取数据建模:
![c12f7b2d54635557657b574fe12f8dbb.png](https://i-blog.csdnimg.cn/blog_migrate/a219644404e28b15b11d32a6635dce02.png)
去掉特征:passengerid,name,ticket,cabin,sibsp,categoricalage,categoricalfare七个特征。得到结果:
![ea655f7fad627407341d0f5a309811ee.png](https://i-blog.csdnimg.cn/blog_migrate/4be2c5356b63323c72d4b073d267372d.png)
数据可视化:
![cdf0bd4924779871c382e339d552f6e6.png](https://i-blog.csdnimg.cn/blog_migrate/d33e12633be5b26c53f0b46bd9267aca.png)
特征相关性:
![43bc25a4163fcf69830cce5629616834.png](https://i-blog.csdnimg.cn/blog_migrate/00535574379f49a0508e9b868212162f.png)
从Pearson Correlation图可以知道,选择的特征没有强烈相关。 从将这些特征提供到学习模型中的观点来看,这是很好的,因为这意味着我们的训练集中没有太多冗余或多余的数据。
分析选取特征对存活率的重要程度:
![af8f33b6df0c79919e0ef40dfef3fa54.png](https://i-blog.csdnimg.cn/blog_migrate/bb1e979cfb82719dba4e3326cb2a3c6a.png)
结果如下:
![02a268c8903a4df5b532d5089ec3ffde.png](https://i-blog.csdnimg.cn/blog_migrate/a6c903c5619280205c02be09c39e0a47.png)
从图中可以看出,Pclass ,Sex ,Fare ,NameLength ,Title五个特征比较重要,所以建模选取这五个特征。
开始建模,定义训练集与测试集:
![6c6118d90f71448e5b42fcb362f0566f.png](https://i-blog.csdnimg.cn/blog_migrate/5cce191955d77e968b43bec9cad7ebc9.png)
SVC模型:
![e6496b46f8e2a09e3059ce5b779a9166.png](https://i-blog.csdnimg.cn/blog_migrate/fc46a59f55c22bf1a12fc90b89831f8b.png)
结果准确率为78%。
线性SVC模型:
![56252c3e00102fe5de135410466eaeca.png](https://i-blog.csdnimg.cn/blog_migrate/248a6324fafed045d7363f433f679b8b.png)
结果准确率为75%。
随机森林:
![392b75c10ec7d6d324d105a40ae81d7f.png](https://i-blog.csdnimg.cn/blog_migrate/3cb22dbd75e182461c573e6bd5fa3266.png)
结果准确率为82%。
逻辑回归:
![bd7649b763da71d18ffb55ce58c073a4.png](https://i-blog.csdnimg.cn/blog_migrate/4cfebe39e6afdfd22f2ae4c2615bc8c0.png)
结果准确率为75%。
K邻近:
![d8739a81382d35f7f9d9899e90598a57.png](https://i-blog.csdnimg.cn/blog_migrate/884daa068bbeffce489194075402cdf5.png)
结果准确率为76%.
XGBoost 模型:
![a207ebdb4e99f645fc67dfe8381fab65.png](https://i-blog.csdnimg.cn/blog_migrate/feec40e1de1b084cc5621a2b37fa6cd7.png)
结果准确率为77%。
从分析结果来看,在理论上优秀的算法不一定在一个实际的案例中由于其他算法,在同样的数据预处理情况下,简单的算法可能表现更高的准确率,在本例中,进行新的特征创建和新特征融合的情况下,预测结果并没有得到明显的改善,这一点没有想明白。
当然,更好一点的可能是组合不同的分类器,并赋予不同分类器一定权重,让我们的分类器更“聪明”,比如构建人工神经网络,可能使得学习的结果更优异,当然这也需要更大的样本。
对于本例来说,研究泰坦尼克号中哪些人更有利存活,一者这是一个过时问题,二者是这个研究本身没有多大的实际意义,更多的是用来练习学到的知识。