Kaggle实战:泰坦尼克幸存者预测 - 上

(文章同步更新于个人博客@dai98.github.io

源代码: Github Kaggle

泰坦尼克幸存者预测是Kaggle上数据竞赛的入门级别的比赛,我曾经在一年前作为作业参加过这个比赛,我想要再次从这个比赛开始,尝试不同的模型,来当作在Kaggle比赛的起点。

关于此次竞赛,我想分成两个部分,第一个部分基于PyTorch建立神经网络,第二个部分使用sklearn做多个分类器投票。

使用的编程环境及依赖包版本:

import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns
import IPython
import numpy as np
import pandas as pd
from collections import Counter
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
import torch
import torch.nn as nn
import torch.nn.functional as F
import warnings
import sys
import os
warnings.filterwarnings("ignore")
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"

在这里插入图片描述

一、数据预处理

首先我们看看数据中有多少空缺值:

我们可以看到,AgeCabinEmbarkedFare有空缺值。Cabin有78%的空缺值,而且其余值也没有明显的规律,我们在之后可以直接删除改列。对于其他值,我们可以对Age和Fare补充中位数,把Embarked补充频率最高的值。

我们可以把训练数据train与测试数据test拼接在一起,一起来进行处理,可以省去各自处理的麻烦。

data = [train,test]

train_backup = train.copy()
test_backup = test.copy()
for dataset in data:
    dataset["Age"].fillna(dataset["Age"].median(),inplace = True)
    dataset["Fare"].fillna(dataset["Fare"].median(),inplace = True)
    dataset["Embarked"].fillna(dataset["Embarked"].mode()[0],inplace = True)

这里有一点需要提醒,如果我们使用for循环来对两个数据集依次进行处理,需要注意Python在对列表值的遍历的时候提供的值是列表值中的浅拷贝,也就是说datasetdata[0]中的值对应的是一个指针,然而是两个不同的对象。所以对dataset做重赋值的情况,并不会真正改变traintest两个数据集。Pandas中有些函数(drop,apply等)可以对数据集进行操作来改变数据集,但记得要把inplace参数设置为True。如果想要在循环中修改数据集的值,一定要记得通过索引来访问列表!

现在没有了空缺值,我们来处理一下其他的数据。我们从Name开始,虽然一个人叫什么不会影响他/她是否幸存,但如果你自己观察,每个人的名字中间带有他们的称谓,或者前缀(Mr, Mrs),能从一定程度上反映出他/她的性别和社会地位,也会一定程度的影响幸存与否。

threshhold = 10

for dataset in data:
    
    dataset["Prefix"] = dataset["Name"].apply(lambda x:x.split(" ")[1])
    freq = (dataset["Prefix"].value_counts() < threshhold)
    dataset["Prefix"] = dataset["Prefix"].apply(lambda x: "others" if freq
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值