
- CatBoost 教程
- CatBoost - 首頁
- CatBoost - 概述
- CatBoost - 架構
- CatBoost - 安裝
- CatBoost - 特性
- CatBoost - 決策樹
- CatBoost - Boosting 過程
- CatBoost - 核心引數
- CatBoost - 資料預處理
- CatBoost - 處理類別特徵
- CatBoost - 處理缺失值
- CatBoost - 分類器
- CatBoost - 迴歸器
- CatBoost - 排序器
- CatBoost - 模型訓練
- CatBoost - 模型評估指標
- CatBoost - 分類指標
- CatBoost - 過擬合檢測
- CatBoost 與其他 Boosting 演算法的比較
- CatBoost 有用資源
- CatBoost - 有用資源
- CatBoost - 討論
CatBoost - 處理缺失值
缺失值意味著資料集中的某些資料不可用。這可能由於多種原因導致,例如資料收集錯誤或有意省略某些資訊。為了構建準確的預測模型,我們必須謹慎地處理它們。在資料集中,典型的缺失值以兩種方式表示,如下所述
NaN(非數字):在數值資料集中,NaN 通常用於表示缺失或未定義的值。IEEE 標準定義了 NaN,這是一種特定的浮點數,在 Python 等程式語言和 NumPy 等庫中經常使用。
NULL 或 NA:在資料庫系統和統計軟體中,NULL 或 NA 可用於識別缺失值。這些僅僅是佔位符,表示特定觀察結果缺少資料。
CatBoost 處理缺失值
CatBoost 可以自行處理缺失值,因此您無需自行修復它們。以下是其工作原理以及如何使用它 -
1. 安裝 CatBoost 庫
首先,您必須確保是否已安裝 CatBoost 庫。如果尚未安裝,則可以使用以下命令進行安裝 -
pip install catboost
2. 匯入庫
安裝後,您可以在模型中使用 CatBoost。因此,在您的程式碼中匯入必要的庫,如 NumPy、Pandas、Matplotlib、Seaborn 和 SKlearn 等,如下所示 -
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from catboost import CatBoostRegressor, Pool from sklearn.metrics import mean_absolute_error, r2_score from sklearn.model_selection import train_test_split
3. 載入資料集
現在,我們從系統目錄載入資料集,這裡我們使用房價資料集來實現模型。然後,我們將將其劃分為訓練集和測試集,並準備類別特徵以在訓練期間提供給 CatBoost。
# Load the dataset data = pd.read_csv('/Python/Datasets/train.csv') # Select features and target variable features = data.columns.difference(['SalePrice']) # All columns except 'SalePrice' target = 'SalePrice' # Change categorical features to strings categorical_features = data[features].select_dtypes(include=['object']).columns for feature in categorical_features: data[feature] = data[feature].astype(str) # Split data into features and target X = data[features] y = data[target] # Split the data into training and testing datasets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Figure out categorical features categorical_features_indices = np.where(X.dtypes == 'object')[0]
此程式碼載入並準備房價資料集以進行建模。它將類別資料轉換為字串。然後將資料分成兩部分:特徵 (X) 和目標 (Y)。之後,資料被分成兩個集合:訓練集 (80%) 和測試集 (20%)。CatBoost 使用變數 categorical_features_indices 來找出哪些特徵是類別特徵,從而使其能夠在訓練期間正確地管理它們。
探索性資料分析
探索性資料分析 (EDA) 使我們能夠更深入地瞭解資料集。
檢查缺失值
這與本章非常相關,並且對任何資料集都有用。如果未正確處理缺失值,則會影響模型的預測。在這裡,我們將看到資料集的哪些列具有缺失值,以及總數。
# Check for missing values missing_values = data.isnull().sum().sort_values(ascending=False) missing_values = missing_values[missing_values > 0] print("\nMissing Values Columns:\n", missing_values)
輸出
以下是模型的結果 -
Missing Values Columns: PoolQC 1453 MiscFeature 1406 Alley 1369 Fence 1179 FireplaceQu 690 LotFrontage 259 GarageYrBlt 81 GarageCond 81 GarageType 81 GarageFinish 81 GarageQual 81 BsmtFinType2 38 BsmtExposure 38 BsmtQual 37 BsmtCond 37 BsmtFinType1 37 MasVnrArea 8 MasVnrType 8 Electrical 1 dtype: int64
為了檢查 'data' DataFrame 中的缺失值,此程式碼對每一列的空值進行求和。然後列印列及其相應的計數,但僅限於缺失值大於零的列。這是透過根據缺失資料量按降序排列列來完成的。
CatBoost 處理類別不平衡
許多現實世界的應用依賴於不平衡的資料集,例如欺詐檢測、醫學診斷和收入損失預測。在這些情況下,與其他類別相比,一個類別被大大忽略了。這種差距會導致模型產生偏差,從而有利於主要類別,導致次要類別的效能低下。
在 CatBoost 中處理不平衡資料的方法
CatBoost 具有多種內建解決方案來處理不平衡的資料集。這包括 -
自動類別權重
平衡準確率指標
過取樣或欠取樣
使用 scale_pos_weight 引數
提前停止
讓我們來看一個現實生活中的例子,說明如何使用 CatBoost 處理不平衡的資料集,然後測試其效能。我們將使用合成數據集來評估不同方法的有效性。
自動類別權重
您可以為不同的類別分配不同的權重,以便為少數類別賦予更大的權重。這可以透過使用 CatBoost 的 class_weights 引數來實現,這有助於模型更多地關注少數類別。
catboost_params = { 'iterations': 500, 'learning_rate': 0.05, 'depth': 6, 'loss_function': 'Logloss', # Higher weight for minority class 'class_weights': [1, 10] } model = CatBoostClassifier(**catboost_params) model.fit(X_train, y_train)
平衡準確率指標
使用調整不平衡資料的評估方法非常重要。可以使用平衡準確率指標來評估模型,該指標同時考慮了兩個類別。
from sklearn.metrics import balanced_accuracy_score y_pred = model.predict(X_test) balanced_acc = balanced_accuracy_score(y_test, y_pred) print("Balanced Accuracy:", balanced_acc)
過取樣或欠取樣
在訓練模型之前,您可以對少數類別進行過取樣或對多數類別進行欠取樣以平衡資料集。合成少數過取樣技術 (SMOTE) 是一種可以用來為少數類別建立合成樣本的技術。
from imblearn.over_sampling import SMOTE sm = SMOTE() X_resampled, y_resampled = sm.fit_resample(X_train, y_train) model = CatBoostClassifier(iterations=500, learning_rate=0.05, depth=6) model.fit(X_resampled, y_resampled)
使用 scale_pos_weight 引數
當資料集非常不平衡時,此引數非常有用。它基本上調整了少數類別的損失函式以減少不平衡。
catboost_params = { 'iterations': 500, 'learning_rate': 0.05, 'depth': 6, 'loss_function': 'Logloss', # Increase for the minority class 'scale_pos_weight': 10 } model = CatBoostClassifier(**catboost_params) model.fit(X_train, y_train)
提前停止
在高度不平衡的資料集中,提前停止在防止模型過度擬合到多數類別方面非常有幫助。
model = CatBoostClassifier(iterations=500, learning_rate=0.05, depth=6) model.fit(X_train, y_train, eval_set=(X_val, y_val), early_stopping_rounds=50)