今天我們要透過 KNN 去解決 Spaceship Titanic
此次 Kaggle Competition 跟一開始介紹 Titanic - Machine Learning from Disaster 是類似的題目
主要是透過資料去判斷說太空船上的乘客的是否被傳送到另一個維度
train.csv
test.csv
sample_submission.csv
train.csv
PassengerId
- 每位乘客都有一個唯一的 IDHomePlanet
- 乘客離開的星球,通常是他們永久居住的星球CryoSleep
- 指示乘客是否選擇在航程期間處於假死狀態Cabin
- 旅客所入住的艙室號
採用甲板/數字/側面的形式,其中側面可以是表示左舷的 P 或表示右舷的 SDestination
- 乘客將要登陸的星球Age
- 乘客的年齡VIP
- 旅客在航程中是否已付費享受特殊VIP服務RoomService
, FoodCourt
, ShoppingMall
, Spa
, VRDeck
- 乘客在泰坦尼克號宇宙飛船的眾多豪華設施中所支付的費用Name
- 乘客的名字和姓氏Transported
- 是否被傳送到另一個維度
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.neighbors import KNeighborsClassifier
from sklearn.impute import SimpleImputer
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
在此說明一下所要用的的 Library
StandardScaler
:用來對數據進行標準化處理,確保每個特徵的平均值為0,標準差為1。
LabelEncoder
:用來將分類標籤轉換成數值,以便機器學習模型能夠處理。
sklearn.neighbors
:這是 scikit-learn
庫中的一個模組,用於K最近鄰(K-Nearest Neighbors)分類。
sklearn.impute
:用於數據缺失值處理。這裡使用了 SimpleImputer
用來填充數據中的缺失值,以確保數據完整性。
sklearn.metrics
:用於模型評估和評價。它包含各種用於評估機器學習模型性能的指標和函數。
sklearn.model_selection
:用於模型選擇和超參數調整。這裡使用了 GridSearchCV
(用於通過網格搜索來找到最佳的超參數組合,以優化機器學習模型的性能。
#read train data
train = pd.read_csv("/kaggle/input/spaceship-titanic/train.csv")
#read test data
test = pd.read_csv("/kaggle/input/spaceship-titanic/test.csv")
#read submission data
submission = pd.read_csv("/kaggle/input/spaceship-titanic/sample_submission.csv")
這裡主要是透過 Kaggle notebook 開發,所以在其他地方開發的讀取資料集的路徑 pd.read_csv
要更改一下。
simp_num = SimpleImputer(missing_values = np.nan, strategy = "mean")
simp_cat = SimpleImputer(missing_values = np.nan, strategy = "most_frequent")
上述程式碼主要使用了兩個不同的資料填補方法(Imputer):一個用於數值資料,另一個用於類別資料。
simp_num = SimpleImputer(missing_values = np.nan, strategy = "mean")
SimpleImputer
是一個用來填補缺失數值資料的工具。missing_values = np.nan
表示要填補的缺失值是NaN(Not-a-Number)。strategy = "mean"
表示填補策略是使用平均值。simp_cat = SimpleImputer(missing_values = np.nan, strategy = "most_frequent")
SimpleImputer
這裡用於填補缺失的類別資料。missing_values = np.nan
表示要填補的缺失值是NaN。strategy = "most_frequent"
表示填補策略是使用最常見的類別值。grid_params = { 'n_neighbors' : range(45,100),
'weights' : ['uniform','distance'],
'metric' : ['minkowski','euclidean','manhattan']
}
# n neighbours is the value of k
gs = GridSearchCV(KNeighborsClassifier(), grid_params, verbose = 1, cv = 3, n_jobs = -1)
# n_jobs is set to -1 which means that the job of finding a good fit will be handled by the Python interpreter on its own.
g_res = gs.fit(X, y)
這裡使用 Grid Search 調整 KNN 的超參數設定
'n_neighbors'
:K最近鄰中的K值,範圍從45到100。'weights'
:鄰居權重的選擇,可以是 'uniform'(統一權重)或 'distance'(距離權重)。'metric'
:距離度量方式,可以是 'minkowski'、'euclidean' 或 'manhattan'。gs = GridSearchCV(KNeighborsClassifier(), grid_params, verbose = 1, cv = 3, n_jobs = -1)
建立了一個網格搜尋物件 (gs
)。
KNeighborsClassifier()
使用K最近鄰分類器。grid_params
是要搜索的超參數範圍。verbose = 1
顯示搜索的進度。cv = 3
是交叉驗證的折數,表示我們將數據分為3折進行交叉驗證。n_jobs = -1
表示使用所有可用的CPU核心來平行處理超參數搜索,以加速搜索過程。g_res = gs.fit(X, y)
開始執行網格搜尋,其中 X
是特徵數據,y
是對應的目標標籤。
該搜索將嘗試不同的超參數組合,並使用交叉驗證來評估每種組合的性能。
最終,它會返回一個包含最佳超參數設置的模型 g_res
,可以用於進一步的機器學習任務。
之後透過 g_res.best_score_
,我們可以發現最佳分數是 0.7929386269273109
而最好的超參數配置 g_res.best_params_
完整的 code 可以去 Kaggle Notebook 實際執行喔~
明天要進入另一個主題 Gaussian Mixture Model 敬請期待