前面几篇逻辑回归的例子有些是人造出来的,有些是比较正规的,但数据都比较完整,没有缺失的属性。虽然我们在很多数据上取到的非常好的效果,但总感觉好像不够味,不像实战。

所有的数据下载地址:https://gitee.com/tianyalei/machine_learning,按对应章节查找。

那么这里有个地方给带给你想要的实战——Kaggle数据分析建模的应用竞赛平台,企业或者研究者可以将问题背景、数据、期望指标等发布到Kaggle上,以竞赛的形式向大家征集解决方案。我们就可以下载分析数据,使用统计/机器学习/数据挖掘等知识,建立算法模型,得出结果并提交,排名top的可能会有奖金哦!

那么这里更多就是我们想要的实战了。

这里就拿里面最知名、参与者最多的泰坦尼克号问题来做示例。

泰坦尼克号是历史中著名的海难事件,大量游客在事故中丧生,也有部分游客获救。这个问题就是他提供了一批乘客的信息如姓名、年龄、性别、票价等等一些信息,和是否获救,然后让你建模分析,再去预测另一批乘客的获救与否。匹配率高的排名就靠前。数据可以在上面网页的data里找到。我提供的也有,分为train.csv和test.csv。

我们看到,总共有12列,其中Survived字段表示的是该乘客是否获救,其余都是乘客的个人信息,包括:

  • PassengerId => 乘客ID
  • Pclass => 乘客等级(1/2/3等舱位)
  • Name => 乘客姓名
  • Sex => 性别
  • Age => 年龄
  • SibSp => 堂兄弟/妹个数
  • Parch => 父母与小孩个数
  • Ticket => 船票信息
  • Fare => 票价
  • Cabin => 客舱
  • Embarked => 登船港口

粗略观察一下数据,发现age里有不少缺失,Cabin(舱号)大量缺失,其他属性个别缺失。

OK,要进入正题了,当我们拿到这样一份很符合实际、但对机器建模很不友好的数据时,该怎么下手。

1 认识数据

首先,也是很重要的一点,对数据本身的涵义认知是非常重要的,一定要基于数据本身的特性进行初步分析。

根据常理,和Jack、Rose给我们上演过的电影,我们初步知道,早期是妇女儿童优先、最早的营救过程应该是比较有序的,妇女儿童会在一开始得到不小的救援力度。然后一些头等舱高等舱的人获救的也会多一些,毕竟身份地位金钱还是有它的价值的。轮船自身的工作人员获救概率比较低,年纪比较大的人获救率也低一些,本身他们的生存能力也比不上年轻人。低等舱的非儿童人员应该概率也低。

我们将数据先导入到weka里看看基本统计。注意先把name中的逗号和单引号 双引号全干掉,不然导入不进来。导入后,主要是看看数据的基本情况,验证一下之前的猜测。由于导入的数据属性默认的格式不对,我们用filter转换成对应的格式,如Survived是Norminal。简单处理后,来观察数据分布:

红的是获救的,蓝色未获救。1等舱获奖率大半,2等不到1半,3等大概20%。女性获奖率很高,男性很低。年龄特别小的概率很高,其他的比较差。SliSp在1-2时生还概率高,其他稍差。Parch在1,2,3时概率高。fare票价基本也是越高的生还率越高。Embarked港口中间的概率最高,其他稍差。

可以看到,高等舱、女性或者年龄特别小的小孩生存概率很高。其他的就得看情况了。

总共342个获救,其他未获救。

2 修补数据

由于age缺少了一部分,还有一些别的列也有部分缺少,所以我们先对他们填充一下。

age的填充原则是这样的,我们从乘客名字中,看Mr、Miss、Master、Mrs、Dr,我们分别统计这些称号的平均年龄,然后将包含这些称号的缺失值填充为平均值。

其他有缺失的值也用这种方法。

Cabin船舱号这个缺失太多,按理说已经不能做为特征了。但这个想想也应该非常重要,毕竟船舱的位置对生还影响还是挺大的。譬如如果是底层锅炉区,基本就全部歇菜了。我们初步看了看,大概有ABCDE等开头的,这些应该都是乘客,缺失的应该有一些是工作人员,譬如烧锅炉的。我们可以考虑使用2种方式,一是将有Cabin的置为1,缺失的为0,而是细分为ABCDE等和缺失,极端情况下,可以删掉该列。

3 转换数据

我们把PassengerId字段干掉,这个肯定没用。把Name也干掉,我们已经通过它算出来了年龄了,它存在的价值就没了。

当然,这是基于正常的通用思维,因为名字对获救率实在是没关系,但是这里比较特殊,属于特定案例。据统计,这批数据中,名字长的比短的获救率要高,而且呈线性关系,这个……

4 尝试不同算法

完成上面的处理后,我们完成了初步的数据清洗,得到文件train1.arff,然后开始进行训练。

毫无疑问,我们先选择逻辑回归作为baseline,因为我们已经知道某些属性和结果是有线性关系的。

进行10次Cross验证

可以看到在训练集上匹配率在80%,在未获救上表现的比较好有85%,在已获救上只有70%的正确率。

OK,我们用同样的数据清洗,把测试集也处理一下,看看最基本的逻辑回归在测试集的表现。

官方下载的test.csv里是没有Survived信息的,我为了方便用weka来导入,给survival也填了值,但是没有价值,所有这个test集的结果没有意义。

我们导出训练结果,按照kaggle要求的格式导入,并查看自己的结果排名。

https://www.kaggle.com/c/titanic/leaderboard。可以看到排名在6984,成功率0.77。

这个结果就是我们的baseline了,最低要求。

然后我们开始进行优化。

我们在前面的只是简单的对缺失值进行了补全,并没有进行融合。由于这里面的各个属性我们都知道他们的含义,所以主要的工作应该在于特征的放大、组合。

至于该怎么个组合法,网上有太多的案例,你会惊奇于各路大神的脑洞。当然,特征工程才是机器学习的核心,很多时候花在特征工程的工作量占比超过80%,而后的算法选择、调参倒相对轻松一些。合适的特征才能真正暴露出数据的特性,不然再好的算法也无能无力。

我大概列几个对属性的处理:

1 我们假设一二三等舱各自内部的票价也与逃生方式相关,从而分出高价一等舱、低价一等舱……这样的分类。

2 Parch and SibSp这两组数据都能显著影响到Survived,但是影响方式不完全相同,所以将这两项合并成FamilySize组的同时保留这两项。

3 将Ticket中的字母与数字分开,分为Ticket_Letter和Ticket_Number两项。

…………

还有各种组合形式可以尝试,构建新的属性,来提高预测的准确率。也可以尝试一下别的算法,如线性回归结合决策树,随机森林等。很多时候做模型融合也能提高准确率。

根据总结的经验,泰坦尼克号这个数据,最高可以模拟到81-83左右的正确率。再高的就是过拟合了,已经不是通用的模型处理了。至于kaggle上那些100%的,90%以上的,不具备太大的参考性。毕竟这个名单最终的幸存情况是有公布的,对着名单做个100%当然可以。

参考:

https://blog.csdn.net/Koala_Tree/article/details/78725881

https://zhuanlan.zhihu.com/p/30538352

2 机器学习入门——逻辑回归之kaggle泰坦尼克号竞赛相关推荐

  1. 机器学习实战-逻辑回归-19

    机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...

  2. 机器学习_2逻辑回归

    机器学习_逻辑回归 分类问题 二分类--Sigmoid函数 Sigmoid函数代码实现 逻辑回归 数学原理 求解方式 正则化 逻辑回归数据集应用样例--代码实现 样例1:有清晰的线性决策边界 决策边界 ...

  3. 机器学习:逻辑回归(logistics regression)

    title: 机器学习:逻辑回归(logistics regression) date: 2019-11-30 20:55:06 mathjax: true categories: 机器学习 tags ...

  4. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

  5. 吴恩达机器学习之逻辑回归(二分类)

    吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...

  6. 【机器学习】逻辑回归原理介绍

    [机器学习]逻辑回归原理介绍 [机器学习]逻辑回归python实现 [机器学习]逻辑回归sklearn实现 Logistic 回归模型是目前广泛使用的学习算法之一,通常用来解决二分类问题,虽然名字中有 ...

  7. 【机器学习】逻辑回归优化技巧总结(全)

    逻辑回归由于其简单高效.易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡.互联网的推荐系统.上文总结了逻辑回归的原理及其实现[全面解析并实现逻辑回归(Python)]. 本文从实际 ...

  8. 【机器学习】逻辑回归代码练习

    是中国大学慕课<机器学习>的"逻辑回归"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-1464096179 ...

  9. 机器学习-了解逻辑回归的逻辑过程

    机器学习-逻辑回归 预测乳腺癌案例 import numpy as np import pandas as pd # 机器学习 import sklearn # 逻辑回归 from sklearn.l ...

最新文章

  1. 操作系统学习笔记 第二章:进程管理(王道考研)
  2. Junit如何进行多线程测试
  3. BAPI_GOODSMVT_CREATE 移动类型311 CODE = '04' 代码
  4. pyecharts怎么绘制散点图_pyecharts可视化和wx的结合
  5. java技术论坛的毕业设计_基于java的bbs论坛设计,软件毕业设计
  6. 阿里云数据库产品专家胡航丽:数据库自动驾驶平台DAS重磅助力数据库领域智能未来...
  7. 国际码可以直接应用于计算机,2012年自考计算机应用基础试题及答案
  8. Genesis Shards即将向用户发放Gen Ticket NFT
  9. 2020 年软件开发趋势预测!
  10. c语言实现统计过程控制,SPC统计过程控制的课程
  11. 同城交友小程序项目功能方案介绍
  12. ShipConstructor.2006v1.00.rar
  13. word embedding和contextual embedding
  14. 自用tomcat、springboot、rust发布脚本
  15. pppoe服务器账号和密码是什么,路由器的PPPOE拨号宽带账号和密码是多少?
  16. mysql怎么求方程的根_实验3-1 求一元二次方程的根
  17. php高级工程师面试题,行不行对照看下自己的实力
  18. EB Tresos 入门指南
  19. 华为matepad10.4适配M-Pen2教程
  20. HMI实时显示网络摄像机监控画面——以海康威视网络摄像机为例

热门文章

  1. wechat-0051,微信公众号,第三方登录—扫码绑定
  2. 国家开放大学-农村社会学-形考作业1
  3. PyTorch:torch.nonzero——非零元素的定位
  4. 电气工程师软件笔试题
  5. 使用uni-app把h5网页封装成安卓app
  6. 【python】输出列表元素,以空格/逗号为分隔符
  7. 【App数据运营分析】
  8. c语言实现24位彩色图像二值化
  9. 怪物的生成 攻击和掉落金币
  10. 清华张敏教授:个性化推荐研究进展(可解释性、鲁棒性和公平性)