kaggle比赛入门 - Spaceship Titanic (第一部分)

1. 导入packages

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set(style='darkgrid', font_scale=1.4)
from imblearn.over_sampling import SMOTE
import itertools
import warnings
warnings.filterwarnings('ignore')
import plotly.express as px
import time
  • %matplotlib inline: 这是一条 Jupyter Notebook 的魔法命令,使图表可以直接显示在 Notebook 单元格中。(如果不是在 Jupyter Notebook 运行,这行代码会报错)
  • sns.set(style=‘darkgrid’, font_scale=1.4): 设置默认的绘图风格为 darkgrid(深色网格背景),并调整字体比例,使图例和标签更易读。
  • plotly.express (px): 交互式可视化库 Plotly 的简化接口,适用于绘制动态图表。
  • SMOTE(Synthetic Minority Over-sampling Technique):从 imblearn.over_sampling 模块导入,用于处理数据不平衡问题,通过合成少数类样本来提升分类模型的表现。
  • time: 用于时间管理,比如计算代码运行时间 (time.time() 获取当前时间戳)。
  • warnings.filterwarnings(‘ignore’): 忽略所有警告信息,避免影响代码运行时的可读性(但可能隐藏重要警告)。
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV, StratifiedKFold
from sklearn.metrics import accuracy_score, confusion_matrix, recall_score, precision_score, f1_score
from sklearn.metrics import roc_auc_score, ConfusionMatrixDisplay, RocCurveDisplay, roc_curve
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, LabelEncoder
from sklearn.feature_selection import mutual_info_classif
from sklearn.decomposition import PCA
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
import eli5
from eli5.sklearn import PermutationImportance
from sklearn.utils import resample
  • StratifiedKFold: 分层 K 折交叉验证,确保训练集和验证集中 类别分布相同,适用于分类任务。
  • StandardScaler: 标准化(均值 0,方差 1,适用于正态分布数据)。
  • PCA: 主成分分析(降维,减少特征数量,保留重要信息)。
  • ColumnTransformer: 针对不同列使用不同的预处理方法(例如,数值特征用 StandardScaler,类别特征用 OneHotEncoder)。
# Models
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from catboost import CatBoostClassifier
from sklearn.naive_bayes import GaussianNB

2. 数据

train = pd.read_csv('/kaggle/input/spaceship-titanic/train.csv')
test = pd.read_csv('/kaggle/input/spaceship-titanic/test.csv')print('Train set shape: ', train.shape)
print('Test set shape: ', test.shape)
train.head()
Train set shape:  (8693, 14)
Test set shape:  (4277, 13)

在这里插入图片描述

缺失值

print('TRAIN SET MISSING VALUES:')
print(train.isna().sum())
print('')
print('TEST SET MISSING VALUES')
print(test.isna().sum())
TRAIN SET MISSING VALUES:
PassengerId       0
HomePlanet      201
CryoSleep       217
Cabin           199
Destination     182
Age             179
VIP             203
RoomService     181
FoodCourt       183
ShoppingMall    208
Spa             183
VRDeck          188
Name            200
Transported       0
dtype: int64TEST SET MISSING VALUES
PassengerId       0
HomePlanet       87
CryoSleep        93
Cabin           100
Destination      92
Age              91
VIP              93
RoomService      82
FoodCourt       106
ShoppingMall     98
Spa             101
VRDeck           80
Name             94
dtype: int64

我们可以看到每一个feature都有缺失值,如何处理这些缺失值非常重要。

重复值

train_duplicate = train.duplicated().sum()
test_duplicate = test.duplicated().sum()print(f'Duplicates in train set: {train_duplicate}, ({np.round(100*train_duplicate/len(train), 1)}%)')
print('')
print(f'Duplicates in test set: {test_duplicate}, ({np.round(100*test_duplicate/len(test), 1)}%)')
Duplicates in train set: 0, (0.0%)Duplicates in test set: 0, (0.0%)

Cardinality of Features(特征的基数)

train.nunique()
PassengerId     8693
HomePlanet         3
CryoSleep          2
Cabin           6560
Destination        3
Age               80
VIP                2
RoomService     1273
FoodCourt       1507
ShoppingMall    1115
Spa             1327
VRDeck          1306
Name            8473
Transported        2
dtype: int64

什么是 Cardinality of Features(特征的基数)?

特征的基数(Cardinality of Features) 指的是 一个特征(变量)中唯一值(类别)的数量,通常用于描述类别特征(categorical features)


低基数(Low Cardinality) vs. 高基数(High Cardinality)

  • 低基数(Low Cardinality):特征的唯一值较少,例如:

    • ["Male", "Female"](性别,仅有 2 个唯一值)
    • ["Yes", "No"](是否订阅,仅有 2 个唯一值)
    • ["Red", "Green", "Blue"](颜色,仅有 3 个唯一值)
  • 高基数(High Cardinality):特征的唯一值较多,例如:

    • ["user_123", "user_456", ..., "user_99999"](用户 ID,有数万个唯一值)
    • ["google.com", "facebook.com", ..., "randomsite.com"](网站访问记录)
    • ["New York", "Los Angeles", "Toronto", ..., "Paris"](全球城市名称)

为什么基数重要?

不同的基数会影响机器学习模型的性能和存储效率,特别是在类别特征编码时。

基数类型影响
低基数(Low Cardinality)- 适合 独热编码(One-Hot Encoding)
- 易于存储,计算成本低。
高基数(High Cardinality)- One-Hot Encoding 会导致维度爆炸(Curse of Dimensionality)
- 适合 目标编码(Target Encoding)哈希编码(Hash Encoding)

如何处理高基数特征?

如果类别特征的基数过高,通常有以下几种方法:

  1. 目标编码(Target Encoding):用该类别对应的目标变量均值代替类别(适用于回归任务)。
  2. 哈希编码(Hash Encoding):通过哈希函数将类别映射到固定数量的维度(减少特征数)。
  3. 降维:使用 PCA、UMAP 等方法降低类别特征的维度。
  4. 合并类别:将出现频率低的类别归为 “Other” 组,减少唯一值数量。

数据类型

train.dtypes
PassengerId      object
HomePlanet       object
CryoSleep        object
Cabin            object
Destination      object
Age             float64
VIP              object
RoomService     float64
FoodCourt       float64
ShoppingMall    float64
Spa             float64
VRDeck          float64
Name             object
Transported        bool
dtype: object

3. 探索性数据分析

plt.figure(figsize=(6,6))# Pie plot
train['Transported'].value_counts().plot.pie(explode=[0.1, 0.1],autopct='%1.1f%%',shadow=True,textprops={'fontsize': 16}
).set_title("Target distribution")
  • 统计 Transported 变量的类别数量,即数据集中该变量的分布情况。
  • Transported 变量是一个二分类变量(如 True/False 或 0/1),则 value_counts() 返回每个类别的样本数。
  • “炸开” 饼图中的每个扇形,使其稍微分开以提高可视化效果。
  • [0.1, 0.1] 表示两个类别的扇形都向外偏移 0.1 个单位。
  • 自动显示每个类别占比的百分比,格式为 1 位小数
  • 给饼图添加阴影,使图表更立体。
  • 设置文本属性,调整 字体大小 为 16 以提高可读性。

在这里插入图片描述

年龄

plt.figure(figsize=(10, 4))# Histogram
sns.histplot(data=train, x='Age', hue='Transported', binwidth=1, kde=True)plt.title('Age distribution')
plt.xlabel('Age (years)')

Python 代码解析:绘制年龄分布直方图(Histogram)

plt.figure(figsize=(10, 4))# Histogram
sns.histplot(data=train, x='Age', hue='Transported', binwidth=1, kde=True)plt.title('Age distribution')
plt.xlabel('Age (years)')

在这里插入图片描述
我们可以看到0-18岁更容易被运输,18-25岁更不容易被运输,大于25岁的可能性相似。因此,我们可以加入一个特征,显示乘客是哪个年龄组的。

sns.histplot(...)

  • 使用 seabornhistplot 绘制直方图,用于查看 Age 变量的分布情况。
参数作用
data=train使用 train 数据集
x='Age'x 轴为 Age(年龄)
hue='Transported'Transported 变量分组(用不同颜色显示)
binwidth=1每个柱子的宽度为 1(即每个年龄单独分组)
kde=True绘制 核密度估计曲线(平滑版直方图)

为什么使用 KDE?

  • 更平滑、更连续:直方图的分布可能会受 bin(柱子)的数量影响,而 KDE 能更平滑地表示数据分布趋势。
  • 更直观地展示数据密度:它能显示数据在哪些区域更集中(密度更高),哪些区域更稀疏。
  • 避免直方图的离散性问题:直方图的形状依赖于 binwidth,而 KDE 能提供更连续的分布。

消费

# Expenditure features
exp_feats = ['RoomService', 'FoodCourt', 'ShoppingMall', 'Spa', 'VRDeck']# Plot expenditure features
fig = plt.figure(figsize=(10,20))for i, var_name in enumerate(exp_feats):# left plotax = fig.add_subplot(5, 2, 2*i + 1)sns.histplot(data=train, x=var_name, axes=ax, bins=30, kde=False, hue='Transported')ax.set_title(var_name)# right plot (truncated)ax = fig.add_subplot(5, 2, 2*i + 2)sns.histplot(data=train, x=var_name, axes=ax, bins=30, kde=True, hue='Transported')plt.ylim([0, 100])ax.set_title(var_name)fig.tight_layout()
plt.show()

fig.tight_layout():自动调整子图之间的间距,防止重叠。
左侧:普通直方图(kde=False)。
右侧:带 KDE 的直方图(kde=True,并限制 y 轴)。
通过 hue=‘Transported’,查看 Transported=0 和 Transported=1 之间的差异。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到被运输的乘客消费更少。
我们可以看到客房服务支出、水疗支出、VR 甲板支出和美食广场支出、购物中心支出有不同的分布。

  • 我们可以创建一个新的特征记录总消费。
  • 我们可以创建一个新的特征记录是否有消费。

类别特征

cat_feats = ['HomePlanet', 'CryoSleep', 'Destination', 'VIP']# plot categorical features
fig = plt.figure(figsize=(10, 16))
for i, var_name in enumerate(cat_feats):ax = fig.add_subplot(4, 1, i+1)sns.countplot(data=train, x=var_name, axes=ax, hue='Transported')ax.set_title(var_name)fig.tight_layout()
plt.show()
  • CryoSleep:乘客是否处于冷冻睡眠状态(True/False)。
  • 这些特征通常是有限离散值,适合使用计数图(countplot)展示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
VIP这个特征分布比较平均,没有什么用处。
CryoSleep是一个非常有用的特征。

Qualitative Features(定性特征)

qual_feats = ['PassengerId', 'Cabin', 'Name']train[qual_feats].head()

在这里插入图片描述

Qualitative Features(定性特征)是指无法用数值直接衡量或排序的特征,通常表示类别、属性或标签,而非连续的数值。这类特征也被称为Categorical Features(分类特征)。

  • 我们可以从PassengerId获得组别和组别大小这两个特征。
  • 我们可以从cabin获取deck, number 和 side这三个特征。
  • 我们可以从Name获取Surname这个特征,从而识别families。

下一篇继续

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

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

相关文章

java基础2(黑马)

一、变量里的数据在计算机中的存储原理 1.二进制 .二进制:只有0、1, 按照逢二进一的方式表示数据。 十进制数字11转换为:1011 方法:除二取余法 计算机中表示数据的最小单元,一个字节(Byte,简…

AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息

目录标题 语句代码解释:1. sys.dm_hadr_database_replica_states 视图字段详细解释及官网链接官网链接字段解释 2. sys.availability_replicas 视图字段详细解释及官网链接官网链接字段解释 查看视图的创建语句方法一:使用 SQL Server Management Studio…

GPU-Z重磅更新,Blackwell架构全面支持

由TechPowerUp倾力打造的GPU-Z,是一款集显卡信息查看、实时监控与深度诊断于一体的强大工具。它以其轻巧灵便的体积、完全免费的使用模式以及极其友好的操作界面,赢得了全球无数用户的青睐与信任,成为PC硬件领域中不可或缺的软件。 GPU-Z不仅…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<6>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们继续来学习数组指针变量,二维数组传参的本质,函数指针变量,…

MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)

MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文档: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 对比: 在 MySQL 中,处理时间相关的数据类型主要有以下几种:DATE、TIME、…

前缀和练习——洛谷P8218:求区间和

题目: 这道题很简单&#xff0c;直接根据题目无脑套公式 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e5 9; using ll long long; ll a[N], perfix[N]; int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步输…

【STM32】蓝牙模块数据包解析

使用到的蓝牙模块为DX-BT24&#xff0c;他可以将串口转蓝牙&#xff0c;实现与手机蓝牙的通信&#xff0c;本次实现使用手机蓝牙发送数据包来控制单片机LED的亮灭&#xff0c;规则如下&#xff1a; AA 05 01 FF AF 该数据包表示包头为AA&#xff0c;05表示该数据包的大小&#…

NSS-DAY2

Crypto [HNCTF 2022 Week1]A dictator 题目&#xff1a; from random import randint from secret import flagoffset randint(1,100) % 26 # print(offset)assert flag.startswith(NSSCTF{) assert all([ord(c) not in range(ord(A),ord(Z)) for c in flag[7:-1]])for cha…

【vue3 入门到实战】7. 标签中的 ref

目录 1. ref 的作用 2. 如何使用 1. ref 的作用 用于注册模板引用 用在普通DOM标签上&#xff0c;获取的是DOM节点。 用在组件标签上&#xff0c;获取的是组件的实例对象。 2. 如何使用 代码如下 <template><div class"app"><h2 ref"titl…

手写MVVM框架-实现简单的数据代理

MVVM框架最显著的特点就是虚拟dom和响应式的数据、我们以Vue为例&#xff0c;分别实现data、computed、created、methods以及虚拟dom。 这一章我们先实现简单的响应式&#xff0c;修改数据之后在控制台打印。 我们将该框架命名为MiniVue。 首先我们需要创建MiniVue的类(src/co…

spy-debugger + Charles 调试移动端/内嵌小程序H5

简介说明&#xff1a; PC端可以用F12进行console等进行调试&#xff0c;但移动端App中使用webview就无法进行实时调试&#xff0c;针对这种情况 1. 安装 全局安装 spy-debugger sudo npm install spy-debugger -g // window不用加sudo2. spy-debugger 证书 其实spy-debugg…

【目标检测】模型验证:K-Fold 交叉验证

K-Fold 交叉验证 1、引言1.1 K 折交叉验证概述 2、配置2.1 数据集2.2 安装包 3、 实战3.1 生成物体检测数据集的特征向量3.2 K 折数据集拆分3.3 保存记录3.4 使用 K 折数据分割训练YOLO 4、总结 1、引言 我们将利用YOLO 检测格式和关键的Python 库&#xff08;如 sklearn、pan…

Android studio ternimal 中gradle 指令失效(gradle环境变量未配置)

默认gradle路径&#xff1a;C:\Users\ylwj.gradle\wrapper\dists\gradle-8.10.2-bin\a04bxjujx95o3nb99gddekhwo\gradle-8.10.2\bin 环境变量-系统环境变量-双击path-配置上即可-注意重启studio才会生效

Axure大屏可视化动态交互设计:解锁数据魅力,引领决策新风尚

可视化组件/模板预览&#xff1a;https://8dge09.axshare.com 一、大屏可视化技术概览 在数据驱动决策的时代&#xff0c;大屏可视化技术凭借直观、动态的展示方式&#xff0c;已成为众多行业提升管理效率和优化决策过程的关键工具。它能够将复杂的数据转化为易于理解的图形和…

Resnet 改进:尝试在不同位置加入Transform模块

目录 1. TransformerBlock 2. resnet 3. 替换部分卷积层 4. 在特定位置插入Transformer模块 5. 使用Transformer全局特征提取器 6. 其他 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transfo…

MySQL调优02 - SQL语句的优化

SQL语句的优化 文章目录 SQL语句的优化一&#xff1a;SQL优化的小技巧1&#xff1a;编写SQL时的注意点1.1&#xff1a;查询时尽量不要使用*1.2&#xff1a;连表查询时尽量不要关联太多表1.3&#xff1a;多表查询时一定要以小驱大1.4&#xff1a;like不要使用左模糊或者全模糊1.…

langchain教程-12.Agent/工具定义/Agent调用工具/Agentic RAG

前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…

大模型中提到的超参数是什么

在大模型中提到的超参数是指在模型训练之前需要手动设置的参数&#xff0c;这些参数决定了模型的训练过程和最终性能。超参数与模型内部通过训练获得的参数&#xff08;如权重和偏置&#xff09;不同&#xff0c;它们通常不会通过训练自动学习&#xff0c;而是需要开发者根据任…

位运算及常用技巧

涉及位运算的运算符如下表所示&#xff1a; 位运算的运算律&#xff1a; 负数的位运算 首先&#xff0c;我们要知道&#xff0c;在计算机中&#xff0c;运算是使用的二进制补码&#xff0c;而正数的补码是它本身&#xff0c;负数的补码则是符号位不变&#xff0c;其余按位取反…

hot100(8)

71.10. 正则表达式匹配 - 力扣&#xff08;LeetCode&#xff09; 动态规划 题解&#xff1a;10. 正则表达式匹配题解 - 力扣&#xff08;LeetCode&#xff09; 72.5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 动态规划 1.dp数组及下标含义 dp[i][j] : 下标i到…