Kaggle竞赛系列_SpaceshipTitanic比赛

【前言】

Spaceship Titanic比赛,类似Titanic比赛,只是增加了更多的属性以及更大的数据量,仍是一个二分类问题。我使用的是基于LightGBM,结合交叉验证进行预测的单模方案,最终得分为0.79,有很多地方还可以改进,如果您愿意分享您宝贵的经验和知识,我将不胜感激。

【比赛简介】

Spaceship Titanic比赛是一个在Kaggle上举办的机器学习挑战,参赛者的任务是预测Spaceship Titanic在与时空异常碰撞时,哪些乘客被传送到了另一个维度。这个比赛提供了从飞船损坏的计算机系统中恢复的一组个人记录,参赛者需要使用这些数据来进行预测。

【正文】

(一)数据获取

参考之前的Titanic比赛的数据获取操作 Kaggle_Titanic比赛

(二)数据分析

1. 初步分析

导入必要的包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

读取文件

train = pd.read_csv('/kaggle/input/spaceship-titanic/train.csv')
test = pd.read_csv('/kaggle/input/spaceship-titanic/test.csv')

对照官方的字段说明

image-20240125094535642

train.csv - 用于训练数据的大约三分之二(约8700名)乘客的个人记录。
PassengerId - 每位乘客的唯一标识。每个标识的格式为gggg_pp,其中gggg表示乘客所在的团体,pp是他们在团体中的编号。一个团体中的人通常是家庭成员,但并不总是如此。
HomePlanet - 乘客出发的星球,通常是他们的永久居住星球。
CryoSleep - 表示乘客是否选择在航程期间被置于悬浮动状态。处于冷冻睡眠状态的乘客被限制在他们的舱房内。
Cabin - 乘客所住的舱房号码。格式为deck/num/side,其中side可以是P(港口)或S(舷侧)。
Destination - 乘客将要下船的星球。
Age - 乘客的年龄。
VIP - 乘客是否支付额外费用获得特殊的VIP服务。
RoomService, FoodCourt, ShoppingMall, Spa, VRDeck - 乘客在太空巨轮泰坦尼克号的许多豪华设施上的费用金额。
Name - 乘客的名字和姓氏。
Transported - 乘客是否被传送到另一个维度。这是目标,也就是您要预测的列。
test.csv - 剩余三分之一(约4300名)乘客的个人记录,用作测试数据。您的任务是预测这一集合中乘客的Transported值。
sample_submission.csv - 一个以正确格式的提交文件。
PassengerId - 测试集中每位乘客的标识。
Transported - 目标。对于每位乘客,预测True或False。

查看前五行

train.head(5)

image-20240125094152130

查看形状(数据量、属性个数)

(train.shape, test.shape)
# ((8693, 14), (4277, 13))

2. 数据质量分析
(1)判断唯一索引是否有重复值
train['Name'].nunique() == train.shape[0],test['Name'].nunique() == test.shape[0]

Out:

(True, True)
(2)缺失值检验
train.isnull().sum()

image-20240125094257510

test.isnull().sum()

image-20240125094323210

根据官方给出的字段解释,其中需要我们填充缺失值的属性只有Age,其他诸如RoomService、FoodCourt等属性并不是缺失值,而是本身的数值就为0,而Name属性的缺失值对我们判断并没有影响,可以忽略。

(3)异常值检验
cols = train.columns.tolist()
cols.remove('Name')
cols.remove('PassengerId')
cols.remove('Transported')

循环打印各个属性的直方图

sns.set()
for col in cols:
    statistic = train[col].describe()
    print(statistic)
    plt.figure(figsize=(6,6))
    sns.histplot(train[col], kde=True)
    plt.title(f'Histogram of {
     
     col}')
    plt.show()

image-20240125120917673

经过对直方图的观察后,初步判断没有将对实验产生影响的异常值

(4)规律一致性检测

判断test表与train表是否出自同一分布

train_count = train.shape[0]
test_count = test.shape[0]
features = cols
i = 1
plt.figure(figsize=(15, 15))
for feature in features:
    plt.subplot(4, 3, i)
    (train[feature].value_counts().sort_index()/train_count).plot()
    (test[feature].value_counts().sort_index()/test_count).plot()
    plt.legend(['train', 'test'])
    plt.xlabel(feature)
    plt.ylabel('radio')
    plt.show
    i+=1

image-20240125121302594

  • 发现在Cabin属性上,train表与test表的分布存在较大差异,但每个值的分布占比又特别小,数值范围特别大,并且峰值出现的规律也很相近(应该是在某个船舱住了较多人)——>也许要对此处进行单独分析(尚未做/(ㄒoㄒ)/~~)
  • 其次,RoomService、FoodCourt等其他属性的0值占比较大,其他数值也基本上也只出现一次,各自占比较小(接近0)
  • 最后,在剩余的属性上train表与test表的分布基本一致

(三)数据预处理

1. 缺失值填充

仅填充Age属性

train['Age'] = train['Age'].fillna(train['Age'].mean())
test['Age'] = test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值