Kaggle系列之预测泰坦尼克号人员的幸存与死亡(随机森林模型)

Kaggle是开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,本节是对于初次接触的伙伴们一个快速了解和参与比赛的例子,快速熟悉这个平台。当然提交预测结果需要注册,这个可能需要科学上网了。

我们选择一个预测的入门的例子:https://www.kaggle.com/competitions/titanic

目的是使用机器学习创建一个模型,预测哪些乘客在泰坦尼克号沉船事故中幸存了下来。

对于泰坦尼克号沉船事故大家都不陌生,很多都是通过电影了解到的,那由于船上没有足够的救生艇,导致2224名乘客和船员中有1502人死亡,也就是幸存者只有722人。虽然存活下来有一定的运气成分,但似乎有些群体的人比其他人更有可能存活下来。

那什么样的人更有可能生存下来呢?其中乘客的数据包括姓名、年龄、性别、社会经济阶层等,在机器学习领域,我们把这些叫做特征值,根据这些特征值来预测乘客是否是生还者。

数据集

先把数据集下载下来熟悉下,点击"Data",下载下来是三个csv文件,这里我把它们放入dataset目录:

训练集train.csv:12列,包含891位乘客的详细介绍,关系着能否幸存的因素

PassengerId:乘客编号、Pclass:票的类型(1、2、3舱位可表示经济实力)、Name:姓名、Sex:性别、Age:年龄、SibSp:兄弟姐妹与配偶在船上的人数、Parch:父母与小孩在船上的人数、Ticket:票号、Fare:票价、Cabin 船舱号码、Embarked 港口(C:瑟堡、Q:皇后镇、S:南安普顿)

测试集test.csv:11列,除了Survived这列,481位乘客的信息,预测的是Survived是否幸存

预测结果gender_submission.csv:展示了应该如何组织预测。它预测所有的女性乘客都活下来了,所有的男性乘客都死了。

熟悉了数据集之后我们就开始构建模型进行训练,看下官方的示例:https://www.kaggle.com/code/alexisbcook/titanic-tutorial

先读取数据集,对于这种行列数据表格式的形式,一般都会用到pandas模块,能够非常方便的读取。

import pandas as pd
train_data = pd.read_csv("dataset/train.csv")
test_data = pd.read_csv("dataset/test.csv")
print(train_data.head(6))
'''PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q[6 rows x 12 columns]
'''

显示的是前6个样本,就是6位乘客的相关资料。

我们回到那个gender_submission.csv,猜测的是女性全部幸存,看下占比怎么样?

print(len(train_data.loc[train_data.Sex=='female']))#314
print(sum(train_data.loc[train_data.Sex=='female']["Survived"]))#233

第一个就是查看有多少女性,总共有314位女性,再看下女性生还者的数量,将Survived为1的累加之后结果是233,也就是说生还的女性有233个,那看下比例:

rate_women = sum(women)/len(women)
print(rate_women)

得出结果是0.7420382165605095,预测结果约等于74.2%的准确率,也就是说女性生还率很高,其Sex性别是一个权重很高的特征值,这个我们在电影中也知道,先让妇女和小孩上船。

当然这种属于简单的预测,还有其他的影响因素都没有考虑进来是吧。

训练模型

这里我们看下官方示例使用的模型,一种叫做random forest model随机森林模型。这个模型由几棵“树”组成(下图中有三棵树,但我们将构建100棵!),它们将分别考虑每位乘客的数据,并投票决定该乘客是否幸存。然后,随机森林模型做出一个民主的决定:得票最多的结果获胜,如图:

from sklearn.ensemble import RandomForestClassifier

如果没有安装这模块,就会报错:

Import "sklearn.ensemble" could not be resolved

Traceback (most recent call last):
File "test.py", line 17, in <module>
from sklearn.ensemble import RandomForestClassifier
ModuleNotFoundError: No module named 'sklearn'

安装:pip install scikit-learn -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

训练并生成预测结果文件submission.csv

from sklearn.ensemble import RandomForestClassifiery = train_data["Survived"]
features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('submission.csv', index=False)
print("Your submission was successfully saved!")

其中特征值我们选用了features = ["Pclass", "Sex", "SibSp", "Parch"]这四个,比如Ticket这个票号其实对于幸存者来说基本是没什么影响,所以也不需要将一些不要的因素给添加进来。

get_dummies的用法

我们转到定义来看下,解释为将分类变量转换为虚拟/指示变量。这句话是什么意思呢,简单来说就是一些分类使用了非数字这些类型,我们将其转换成0与1这样的数字,且进行单独分类列出,类似以前介绍过的独热编码One-Hot

比如在示例中的Sex性别这栏,使用get_dummies处理之后,Sex中的female与male将分成两列,Sex_female和Sex_male,里面是0或1的值。单独拎出来看个例子就明白了,例子都来自官方源码示例:

s = pd.Series(list('abca'))
>>> pd.get_dummies(s)a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

可以看到第一个a和第四个a为1,其余为0,b和c也是一样的,所在位置为1,其余位置为0

对于缺失数据NaN的处理:

s1 = ['a', 'b', np.nan]
>>> pd.get_dummies(s1)a  b
0  1  0
1  0  1
2  0  0
>>> pd.get_dummies(s1, dummy_na=True)a  b  NaN
0  1  0    0
1  0  1    0
2  0  0    1

一个是忽略一个是保留缺失

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': [1, 2, 3]})
>>> pd.get_dummies(df)C  A_a  A_b  B_a  B_b  B_c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1

这个列名前缀就是列名_值,跟前面的Sex_femal一样。

当然也可以自己指定列名前缀

pd.get_dummies(df, prefix=['col1', 'col2'])
>>> pd.get_dummies(df, prefix=['col1', 'col2'])C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1

其他参数比如drop_first=True删除第一列,指定值类型dtype=float等,基本上就是上述用法为主,更多详情可以参看其定义

Submit Predictions

最后就是将你自己预测的结果提交即可,点击“Submit Predictions”,提交的文件格式:

包含418个条目和一个标题行的csv文件。如果您有额外的列(除了PassengerId和)或行,则提交将显示错误。

该文件应该有2列:

PassengerId(乘客编号,按任意顺序排序)

Survived(幸存为1,死亡为0)

提交直接的结果如下,0.77511,也就是说准确率在77.5%左右。

提高分数的延展

我们做下修改,让分数提高点看能不能做到,因为我知道年龄对于逃生也是一个很关键的因素,所以我将年龄也添加进来试下,看是什么样的效果,而且我把它放到仅次于性别之后:

features = ["Pclass", "Sex","Age", "SibSp", "Parch"]

当然这样直接运行会报错:

type_err, msg_dtype if msg_dtype is not None else X.dtype
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

因为在Age列里面有缺失的数据,也就是说有的人年龄是未知的,于是我将缺失的使用一个平均年龄来填充X=X.fillna(24)

完整代码如下:

from sklearn.ensemble import RandomForestClassifiery = train_data["Survived"]
features = ["Pclass", "Sex","Age", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
X=X.fillna(24)
X_test = pd.get_dummies(test_data[features])
X_test=X_test.fillna(24)
#print(train_data["Age"].sum()/len(train_data["Age"]))#23.79model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('submission.csv', index=False)
print("Your submission was successfully saved!")

提交之后分数有提高,达到了0.7799

Kaggle房价预测的练习(K折交叉验证)

有兴趣的也可以去熟悉下,通过现有的数据集,来预测不同位置面积等房子的售价。

好了,Kaggle的使用就这么愉快的搞定了,多看大神的源码和参加比赛,对于能力的提高是很有帮助的。欢迎大家留言交流,有不正确的地方欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44424.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【时间序列预测】人口数量预测神经网络程序

下载完整代码 clc;clear; %导入1949年至2010年人口数据 dataimportdata(population_data.txt); lag3; %利用前3年数据做为输入&#xff0c;去预测下一年人口数量 nlength(data); %计算数据长度 %% %准备输入和输出数据 inputszeros(lag,n-lag); for i1:n-lag inpu…

Prophet:一种大规模时间序列预测模型

前言 Prophet是由facebook开发的开源时间序列预测程序&#xff0c;擅长处理具有季节性特征大规模商业时间序列数据。本文主要介绍了Prophet模型的设计原理&#xff0c;并与经典的时间序列模型ARIMA进行了对比。 1. Prophet模型原理 Prophet模型把一个时间序列看做由3种主要成分…

时间序列预测算法梳理(Arima、Prophet、Nbeats、NbeatsX、Informer)

时间序列预测算法梳理&#xff08;Arima、Prophet、Nbeats、NbeatsX、Informer&#xff09; Arima1. 算法原理2. 算法实现 Prophet1. 优点2. 算法实现3.算法api实现&#xff08;fbprophet调api&#xff09; Nbeats1. Nbeats优点2. Nbeats模型结构 NbeatsXInformer参考&#xff…

Prophet 时间序列预测

Prophet 允许使用具有指定承载能力的物流增长趋势模型进行预测。 我们必须在列中指定承载能力cap。在这里&#xff0c;我们将假设一个特定的值&#xff0c;但这通常是使用有关市场规模的数据或专业知识来设置的。 # Python df[cap] 8.5需要注意的重要事项是cap必须为数据框中…

时间序列预测方法之 DeepAR

本文链接&#xff1a;个人站 | 简书 | CSDN 版权声明&#xff1a;除特别声明外&#xff0c;本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。 最近打算分享一些基于深度学习的时间序列预测方法。这是第一篇。 DeepAR 是 Amazon 于 2017 年提出的基于深度学习的时间序列预…

【时间序列】初识时间序列预测神器 NeuralProphet 实战预测股票指数

历经神奇的2022年&#xff0c;终于迎来曙光的2023年&#xff0c;新的一年&#xff0c;MyEncyclopedia 会和小伙伴们一同学习思考实践。长风破浪会有时&#xff0c;直挂云帆济沧海&#xff01;共勉之 NeuralProphet深度学习Prophet NeuralProphet 负有盛名&#xff0c;是 Facebo…

时序预测 | Python实现TCN时间卷积神经网络时间序列预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍环境准备模型描述程序设计学习小结参考资料预测效果 基本介绍 递归神经网络 (RNN),尤其是 LSTM,非常适合时间序列处理。 作为研究相关技术…

使用sklearn.ensemble.RandomForestRegressor和GridSearchCV进行成人死亡率预测

原文链接&#xff1a;https://blog.csdn.net/weixin_44491423/article/details/127011461 本文借鉴博主hhhcbw实现方法完成随机森林回归预测成人死亡率&#xff0c;使用训练数据测试模型的最优得分R20.8161&#xff0c;在测试集上得分R20.5825 成年人死亡率指的是每一千人中15岁…

基于TCN时间序列预测Python程序

基于TCN预测模型 特色&#xff1a;1、单变量&#xff0c;多变量输入&#xff0c;自由切换 2、单步预测&#xff0c;多步预测&#xff0c;自动切换 3、基于Pytorch架构 4、多个评估指标&#xff08;MAE,MSE,R2,MAPE等&#xff09; 5、数据从excel文件中读取&#xff0c;更换简单…

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测 目录 时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测预测效果基本介绍环境配置程序设计模型效果参考资料预测效果 基本介绍 使用时间注意卷积神经网络进行…

AI预测死亡时间,准确率95%

&#xff08;本内容转载自公众号“科技与Python”&#xff09; 日前&#xff0c;谷歌新出炉的一项研究报告称&#xff0c;该公司已开发出一种新人工智能(AI)算法&#xff0c;可预测人的死亡时间&#xff0c;且准确率高达95%。最近&#xff0c;谷歌的这项研究发表在了《自然》杂…

FACEBOOK 时间序列预测算法 PROPHET 的研究

1.思想 在时间序列分析领域&#xff0c;有一种常见的分析方法叫做时间序列的分解&#xff08;Decomposition of Time Series&#xff09;&#xff0c;它把时间序列 分成几个部分&#xff0c;分别是季节项 &#xff0c;趋势项 &#xff0c;剩余项 。也就是说对所有的 &#xff…

python 用LSTM预测时间序列之预测新冠肺炎疫情

用到的模块 import numpy import matplotlib.pyplot as plt from pandas import read_csv import math from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from sklearn.metrics import mean_squared_error from keras.call…

基于self-attention-TCN时间序列预测Python程序

基于self-attention-TCN时间序列预测Python程序 特色&#xff1a;1、单变量&#xff0c;多变量输入&#xff0c;自由切换 2、单步预测&#xff0c;多步预测&#xff0c;自动切换 3、基于Pytorch架构 4、多个评估指标&#xff08;MAE,MSE,R2,M…

Kaggle_Titanic生存预测 -- 详细流程吐血梳理

作者&#xff1a; 大树先生 博客&#xff1a; http://blog.csdn.net/koala_tree 知乎&#xff1a;https://www.zhihu.com/people/dashuxiansheng GitHub&#xff1a;https://github.com/MrLeeTree 2017 年 12 月 5 日 一直想在Kaggle上参加一次比赛&#xff0c;奈何被各种事情所…

python攻陷米哈游《元神》数据?详情请看文章。。

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 《原神》是由米哈游自研的一款全新开放世界冒险RPG。 里面拥有许多丰富得角色&#xff0c;让玩家为之着迷~ 今天&#xff0c;我们就来用python探索一下原神游戏角色信息&#xff01; 标题大家看看就好了哈~&#xff08…

米哈游技术总监详解《原神》画面效果的技术实现

11月17日&#xff0c;中国Unity线上技术大会游戏专场迎来米哈游技术总监弋振中的分享&#xff0c;此次他围绕“从手机走向主机-《原神》主机版渲染技术”为主题&#xff0c;细致地讲解了《原神》在主机上渲染技术实现的重点内容。 以下是演讲内容&#xff08;有节选&#xff09…

原神反调试分析

打开CE&#xff0c;打开原神启动器。 至此&#xff0c;游戏未加载驱动。启动器可以被CE正常读写。 打开原神&#xff0c;CE中选择YuanShen.exe,发现原神并不能被读写。 尝试分析不能读写的原因。 CE调用的读取内存函数是NtReadVirtualMemory 猜测有三种可能 1.NtReadVirtu…

关于原神抽奖概率的简要分析

序言 最近迷上了原神这款游戏&#xff0c;趁着保研完&#xff0c;肝了两个星期&#xff0c;也氪了一些金。先不谈这款游戏可玩性有多高&#xff0c;但论氪金强度算是我从小到大玩的游戏中&#xff0c;能排得上第一的了。 对于这种寸卡寸金的游戏&#xff0c;如何在无穷无尽的…

CAD教程:如何将Excel数据快速导入CAD图纸

在平时的设计工作中&#xff0c;为了图纸内容的丰富性&#xff0c;通常会在里面添加一些元素&#xff0c;使得数据更加的完善&#xff0c;那我们想在CAD图纸中添加一份Excel数据表&#xff0c;徒手绘制那就肯定是太过于麻烦了&#xff0c;那怎么才能省时省事呢&#xff1f;这个…