我的第一个 Kaggle 比赛学习 - Titanic

背景

Titanic: Machine Learning from Disaster - Kaggle

2 年前就被推荐照着这个比赛做一下,结果我打开这个页面便蒙了,完全不知道该如何下手。

两年后,再次打开这个页面,看到清清楚楚的Titanic Tutorial - Kaggle,完全傻瓜式的照着做就能做下来。当年是什么蒙蔽了我的眼睛~

Target

use machine learning to create a model that predicts which passengers survived the Titanic shipwreck

Data

Titanic: Machine Learning from Disaster - Kaggle

  • train.csv

    • Survived: 1=yes, 0=No
  • test.csv
  • gender_submission.csv: for prediction
    • PassengerId: those from test.csv
    • Survived: final result

Guide to help start and follow

Titanic Tutorial - Kaggle

Learning Model

摘抄的网站的解释,后面具体谈。

  • random forest model

    • constructed of several "trees"

      • that will individually consider each passenger‘s data
      • and vote on whether the individual survived.
      • Then, the random forest model makes a democratic decision:
        • the outcome with the most votes wins!

sklearn.ensemble.RandomForestClassifier

Titanic比赛中用到的是 RandomForestClassifier 算法,在了解这个算法前,我注意到 sklearn 中这个算法类是在 ensemble 模块中,英文不好,不知道 ensemble 是什么意思?所以想先了解一下 ensemble

ensemble

字典的解释是:a number of things considered as a group

听起来有组合的意思。

搜索了一下,在 ML 中有 ensemble learning, 翻译多是“集成学习”,参考集成学习(ensemble learning)应如何入门? - 知乎提到,有三种常见的集成学习框架:baggingboostingstacking

API Reference — scikit-learn 0.22.1 documentation中也能看出来这几种框架都有相应的算法。

Random Forestbagging 框架中的一个算法。这里就单先试着理解这个,其他框架等以后遇到了再说。但是了解这个之前,还是得先清楚 Ensemble Learning 到底是什么?

In statistics and machine learning, ensemble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone.

这个解释应和了字面上的意思,组合了多种算法来获得更好的预测性能,结果优于单用其中的单个算法。

bagging 框架

sklearn.ensemble.BaggingClassifier — scikit-learn 0.22.1 documentation

A Bagging classifier is an ensemble meta-estimator that fits base classifiers each on random subsets of the original dataset and then aggregate their individual predictions (either by voting or by averaging) to form a final prediction.

大意就是:

  • 从源数据集中随机抽样一部分子集样本
  • 在这个子集样本上训练分类器
  • 重复多次上述步骤
  • 然后将各分类器的预测结果整合 (求平均或投票)
  • 形成最终的预测

问题是:

  • 抽取多少次子集样本,即要做多少分类器?
  • 随机抽取的算法用什么?
  • 整合各分类器结果的时候,求平均和投票各有什么优劣势?
  • 如何训练各个分类器?

我都不晓得~

前面提到 Random Forestbagging 框架的一种算法。现在来看看这个算法如何解答我的一些疑问。

Random Forest 算法

1.11. Ensemble methods — scikit-learn 0.22.1 documentation

The prediction of the ensemble is given as the averaged prediction of the individual classifiers.

先明确了一个,这个算法是怼各分类器求平均的。Forest of what? 自然是 forest of trees, 而这里的 tree 指的是 decision trees,所以这个算法其实是 averaging algorithms based on randomized decision trees

random forest builds multiple decision trees and merges them together to get a more accurate and stable prediction.

Random forest对每个分类器都建一个决策树,然后再合并。

分类器是如何划分的呢?还是以 Titanic 的代码为例来试着理解下:

from sklearn.ensemble import RandomForestClassifier

y = train_data["Survived"]

features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
  • y:是训练集中灾难中存活的人的集合
  • features: 是这些人的特征值,如性别,几等舱等
  • X :生成 dummy 数据,为什么要用 get_dummies而不是直接用train_data[features]呢?

尝试直接用 train_data[features], 打印 X 的结果是这样的:

     Pclass     Sex  SibSp  Parch
0         3    male      1      0
1         1  female      1      0

如果再继续用这个 X 建模的话,会报错:

ValueError: could not convert string to float: 'male'

显然,因为 Sex 字段是 string 类型,而模型需要的是 float 类型,所以不能直接用 train_data[features]

get_dummies() 的作用也清楚了,就是将这些 string 类型的字段转化成 float 类型。从下面的打印结果也可以看出,Sex 字段被分成了两个字段,Sex_male, Sex_female, 其值分别是 0 和 1.

Pclass  SibSp  Parch  Sex_female  Sex_male
0         3      1      0           0         1
1         1      1      0           1         0
2         3      0      0           1         0
3         1      1      0           1         0
4         3      0      0           0         1
..      ...    ...    ...         ...       ...
886       2      0      0           0         1
887       1      0      0           1         0
888       3      1      2           1         0
889       1      0      0           0         1
890       3      0      0           0         1
  • RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)

    • 这几个参数分别是什么意思?

      • n_estimators : 决策树的数量
      • max_depths:决策树的最大深度
      • random_state: 控制随机数生成器的,(实际没太明白,这个随机是不是指随机抽样?),可能要和其他参数配合用比如 shuffle。另外还提到,这个数用了控制随机算法,使得运行多次每次都还是产生相同结果?
        • To make a randomized algorithm deterministic (i.e. running it multiple times will produce the same result), an arbitrary integer random_state can be used

具体如何调参,参考 parameter tuning guidelines

Random Forest的应用场景

既然是分类器算法,自然很多分类应用的场景都适合了;另外还有回归问题的场景。

这篇文章The Random Forest Algorithm: A Complete Guide - Built In给出了一个实际例子的类比:

  • 你在决定去哪儿旅行,去询问你的朋友
  • 朋友问,你以前的旅行中喜欢和不喜欢的方面都哪些
    • 在这个基础上给出了一些建议
  • 这为你的决策提供了素材
  • 同样的步骤,你又去询问另一个朋友
  • 以及另另一个朋友
  • ...

同样,你拿到了几个 offer,犹豫该接哪个等等;看中了几套房子,决定选哪个,貌似都可以套用这个算法一试了。

学到的几个之前不熟悉的代码

test_data = pd.read_csv("/kaggle/input/titanic/test.csv")
test_data.head()
men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men)/len(men)

Reference

本文由博客一文多发平台 OpenWrite 发布!

原文地址:https://www.cnblogs.com/learnbydoing/p/12232970.html

时间: 2024-10-11 21:34:13

我的第一个 Kaggle 比赛学习 - Titanic的相关文章

Kaggle比赛总结

做完 Kaggle 比赛已经快五个月了,今天来总结一下,为秋招做个准备. 题目要求:根据主办方提供的超过 4 天约 2 亿次的点击数据,建立预测模型预测用户是否会在点击移动应用广告后下载应用程序. 数据集特点: 数据量很大,有 2 亿条之多 数据是不平衡的,点击下载的数量远远小于没有点击下载的数量 不平衡数据集的处理思路: 一般对样本进行 上采样 和 下采样,顾名思义就是 多的样本少采一点,少的样本多采一点.极端情况下,就是样本太多的时候,就可以做增强学习,就是我给我的少样本增加噪音.但是由于我

Kaggle比赛:从何着手?

介绍 参加Kaggle比赛,我必须有哪些技能呢? 你有没有面对过这样的问题?最少在我大二的时候,我有过.过去我仅仅想象Kaggle比赛的困难度,我就感觉害怕.这种恐惧跟我怕水的感觉相似.怕水,让我无法参加一些游泳课程.然而,后来,我得到的教训是只要你不真的跨进水里,你就不知道水有多深.相同的哲学对Kaggle也一样适用.没有试过之前不要下结论. Kaggle,数据科学的家园,为竞赛参与者,客户解决方案和招聘求职提供了一个全球性的平台.这是Kaggle的特殊吸引力,它提供的竞赛不仅让你站到不同的高

pytorch实战 猫狗大战Kaggle 迁移学习ResNet50模型微调

pytorch实战 猫狗大战Kaggle 迁移学习ResNet50模型微调 猫狗大战数据集 这是kaggle上一个非常经典的二分类图像数据集,训练集包括25000张猫和狗的图片及其标签,测试集则是12500张未标签图片,数据下载地址https://www.kaggle.com/c/dogs-vs-cats/data.不过这个网址比较远古,无法提交自己训练的答案,可以到新的(虽然也不新了)比赛链接提交https://www.kaggle.com/c/dogs-vs-cats-redux-kerne

kaggle初探之titanic

环境部署 环境部署需要安装python,这里已经配置好,略过 首先登陆kaggle 下载titanic数据 https://www.kaggle.com/c/titanic/data 点击Download ALL 查看数据 gender test.csv train.csv 开始建模 import pandas as pd import os from sklearn.feature_extraction import DictVectorizer #导入随机森林 from sklearn.en

本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区

原文:本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区 安装 docker# 安装方法:https://hub.docker.com/?overlay=onboarding 文档手册:https://docs.docker.com/docker-hub/ 安装完成后使用命令查看版本 $ docker --version 下载镜像# 1.拉取需要的镜像# 去 hub.docker.com 拉取需要的镜像 2.查看拉取方法# 3.转到终端界面# 拉取

kaggle—first play—Titanic

玩了很久总算是又静下心来好好看书,经过一段时间的学习,打算稍微检验一下知识的掌握程度,所以去kaggle参加了久闻的泰坦尼克生还预测,以下是正文. ----------------------------------------------------------------------------------------- 1.观察数据 拿到数据集后,先来了解数据的大致情况. data.info() data_des = data.describe()          可以得知数据集有12列

Kaggle比赛(二)House Prices: Advanced Regression Techniques

房价预测是我入门Kaggle的第二个比赛,参考学习了他人的一篇优秀教程:https://www.kaggle.com/serigne/stacked-regressions-top-4-on-leaderboard 通过Serigne的这篇notebook,我学习到了关于数据分析.特征工程.集成学习等等很多有用的知识,在这里感谢一下这位大佬. 本篇文章立足于Serigne的教程,将他的大部分代码实现了一遍,修正了个别小错误,也加入了自己的一些视角和思考,做了一些自认为reasonable的"改进

kaggle数据挖掘——以Titanic为例介绍处理数据大致步骤

Titanic是kaggle上的一道just for fun的题,没有奖金,但是数据整洁,拿来练手最好不过. 本文以 Titanic 的数据,使用较为简单的决策树,介绍处理数据大致过程.步骤 注意,本文的目的,在于帮助你入门数据挖掘,熟悉处理数据步骤.流程 决策树模型是一种简单易用的非参数分类器.它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,对噪声数据和缺失数据不敏感.下面示范用kaggle竞赛titanic中的数据集为做决策树分类,目标变量为survive 读取数据

记一次失败的kaggle比赛(3):失败在什么地方,贪心筛选特征、交叉验证、blending

今天这个比赛结束了,结果可以看:https://www.kaggle.com/c/santander-customer-satisfaction/leaderboard public结果: private结果: 首先对比private和public的结果,可以发现: 1)几乎所有的人都overfitting了:或者说private的另一半测试数据比public的那一半测试数据更不规律. 2)private的前十名有5个是在public中排不进前几百,有四个甚至排在1000名到2000名之间:说明