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.pswp.cn/web/68119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68119.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基礎2(黑馬)

一、變量里的數據在計算機中的存儲原理 1.二進制 .二進制:只有0、1, 按照逢二進一的方式表示數據。 十進制數字11轉換為:1011 方法:除二取余法 計算機中表示數據的最小單元,一個字節(Byte,簡…

【戒抖音系列】短視頻戒除-1-對推薦算法進行干擾

如今推薦算法已經滲透到人們生活的方方面面,尤其是抖音等短視頻核心就是推薦算法。 【短視頻的危害】 1> 會讓人變笨,慢慢讓人喪失注意力與專注力 2> 讓人喪失閱讀長文的能力 3> 讓人沉浸在一個又一個快感與嗨點當中。當我們刷短視頻時&#x…

docker安裝es及分詞器ik

系統是macos,docker是docker-desktop 拉取鏡像 docker pull bitnami/elasticsearch 啟動docker鏡像 docker create -e "discovery.typesingle-node" \ --name elasticsearch1 -p 9200:9200 -p 9300:9300 \ bitnami/elasticsearch:8.17.1 測試是否好…

CSS Position(定位)詳解及舉例說明

在CSS中,position屬性用于指定元素的定位類型。通過設置不同的position值,我們可以控制元素在頁面中的布局方式。position屬性有五個常用的值:static、relative、fixed、absolute和sticky。本文將詳細介紹這五種定位方式,并通過實…

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不僅…

c++11總結26——std::regex

std::regex 是 C11 引入的 正則表達式庫&#xff0c;用于 字符串匹配、搜索和替換。 &#x1f539; 頭文件&#xff1a;#include <regex> &#x1f539; 命名空間&#xff1a;std &#x1f539; 支持的匹配模式&#xff1a;ECMAScript&#xff08;默認&#xff09;、POS…

程序詩篇里的靈動筆觸:指針繪就數據的夢幻藍圖<6>

大家好啊&#xff0c;我是小象?(?ω?)? 我的博客&#xff1a;Xiao Xiangζ????? 很高興見到大家&#xff0c;希望能夠和大家一起交流學習&#xff0c;共同進步。 今天我們繼續來學習數組指針變量&#xff0c;二維數組傳參的本質&#xff0c;函數指針變量&#xff0c;…

MySQL時間類型相關總結(DATETIME, TIMESTAMP, DATE, TIME, YEAR)

MySQL時間類型相關總結(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文檔&#xff1a; https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 對比&#xff1a; 在 MySQL 中&#xff0c;處理時間相關的數據類型主要有以下幾種&#xff1a;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…

Redis命令:列表模糊刪除詳解

前言 在Redis中&#xff0c;列表&#xff08;List&#xff09;是一種非常常用的數據結構&#xff0c;允許存儲多個有序的元素。然而&#xff0c;在實際應用中&#xff0c;可能會遇到需要刪除列表中符合某種模式的元素的需求。本文將詳細介紹如何在Redis中實現列表的模糊刪除。…

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…