- CatBoost 教程
- CatBoost - 首頁
- CatBoost - 概述
- CatBoost - 架構
- CatBoost - 安裝
- CatBoost - 特性
- CatBoost - 決策樹
- CatBoost - 提升過程
- CatBoost - 核心引數
- CatBoost - 資料預處理
- CatBoost - 處理類別特徵
- CatBoost - 處理缺失值
- CatBoost - 分類器
- CatBoost - 迴歸器
- CatBoost - 排序器
- CatBoost - 模型訓練
- CatBoost - 模型評估指標
- CatBoost - 分類指標
- CatBoost - 過擬合檢測
- CatBoost 與其他提升演算法的比較
- CatBoost 有用資源
- CatBoost - 有用資源
- CatBoost - 討論
CatBoost - 處理類別特徵
類別特徵是表示類別或標籤而不是數值的變數,因此有時也被稱為名義或離散特徵。這些特徵在各種現實世界的資料集中很常見,並且難以包含到機器學習模型中。
我們可以將類別分為兩種主要型別:
名義類別特徵:這些特徵表示沒有基本順序或等級的類別,例如顏色、性別和國家。這些特徵通常需要特殊的編碼,例如標籤編碼才能用於機器學習模型。
有序類別特徵:這些特徵表示具有有意義的順序或等級的類別,例如教育水平,其類別包括高中、學士學位、碩士學位等等。這些特徵可以寫成整數來表示它們的順序。
CatBoost 引數
CatBoost 是一個高階梯度提升庫,包含大量用於更改和改進模型的引數。讓我們來看一下一些最常用的 CatBoost 引數:
學習率 (learning_rate):隨著損失函式接近其最小值,步長在每次迭代中都會進行調整。但是它需要更多迭代,較慢的學習率可以增強訓練。最常見的值範圍在 0.01 到 0.3 之間。
迭代次數 (iterations):它顯示整合樹或提升迭代的總數。更多的迭代可以提升模型效能,但它們會增加過擬合的可能性。幾百到幾千是一個平均範圍。
L2 葉子正則化 (l2_leaf_reg):這是加權 L2 正則化。懲罰特徵上的權重過大有助於減少過擬合。調整此值可以改進正則化。
樹的深度 (depth):它指的是整合中樹的總數。它定義了每棵樹的複雜程度。雖然更深的樹可以描述複雜的關聯,但它們更容易過擬合。值通常在 4 到 10 之間變化。
詳細程度 (verbose):設定為 True 時,它會在迭代期間顯示訓練進度。如果為 False,則它會靜默工作,不會列印進度。
隨機種子 (random_seed):這是隨機數生成器使用的種子。設定此值可以確保結果的可重複性。
獨熱編碼最大大小 (one_hot_max_size):類別特徵的獨熱編碼可以支援的獨特類別的最大數量。如果唯一類別的數量超過此限制,CatBoost 會使用有效的方法來不同地處理該特徵。
類別特徵 (cat_features):一組表示類別特徵的索引。CatBoost 會對這些特徵進行編碼以進行訓練,並以不同的方式處理它們。
使用類別特徵的 CatBoost
與許多其他機器學習模型不同,在這些模型中需要手動編碼類別變數或特徵,但 CatBoost 可以直接處理類別特徵。你只需要告訴哪些特徵是類別的,CatBoost 就會處理它們。所以讓我們看看如何使用類別特徵實現 CatBoost:
1. 安裝 CatBoost 庫
首先,你必須確保你是否已經安裝了 CatBoost 庫。如果尚未安裝,可以使用以下命令安裝:
pip install catboost
匯入庫
安裝後,你就可以在你的模型中使用它了。因此,像下面一樣匯入程式碼中必要的庫:
from catboost import CatBoostClassifier, Pool from sklearn.model_selection import train_test_split
2. 載入和準備資料
你必須確保你的資料集具有類別特徵。正如我們前面討論的,你不需要手動編碼它們。
# Sample Data data = [ ['red', 1, 5.1], ['blue', 0, 3.5], ['green', 1, 4.7], ['blue', 0, 2.9], ['red', 1, 5.0] ]
3. 目標值和資料分割
現在,你必須確定目標值,然後將其轉換為資料框。轉換為資料框後,你必須將資料分割成測試和訓練資料集以測試和訓練模型。
# Target values labels = [1, 0, 1, 0, 1] # Convert to DataFrame import pandas as pd df = pd.DataFrame(data, columns=['color', 'feature1', 'feature2']) # Split data into train and test sets X_train, X_test, y_train, y_test = train_test_split(df, labels, test_size=0.2, random_state=42)
4. 識別類別特徵
正如我們本章前面所看到的,在 CatBoost 中,你必須告訴模型哪些特徵是類別的。這可以透過傳遞類別特徵的索引或名稱來實現,如下所示:
# Declare categorical features (column index or name) categorical_features = ['color']
5. 訓練模型
現在,使用 CatBoost 的 CatBoostClassifier 或 CatBoostRegressor 進行分類或迴歸任務。在執行此操作之前,你必須建立一個池物件來指定資料、標籤和類別特徵。請參見下面的程式碼:
# Pool object
train_pool = Pool(data=X_train, label=y_train, cat_features=categorical_features)
test_pool = Pool(data=X_test, label=y_test, cat_features=categorical_features)
# Initialize and train the model
model = CatBoostClassifier(iterations=100, learning_rate=0.1, depth=6)
model.fit(train_pool)
# Predict on the test set
preds = model.predict(test_pool)
# Model accuracy
accuracy = (preds == y_test).mean()
print(f"Accuracy: {accuracy}")
輸出
這是我們為 CatBoost 中的類別特徵建立的上述模型的結果:
0: learn: 0.6869753 total: 59.5ms remaining: 5.89s 1: learn: 0.6794071 total: 61.6ms remaining: 3.02s 2: learn: 0.6632128 total: 61.8ms remaining: 2s . . . 96: learn: 0.2241489 total: 83.4ms remaining: 2.58ms 97: learn: 0.2228507 total: 83.5ms remaining: 1.7ms 98: learn: 0.2215656 total: 83.7ms remaining: 845us 99: learn: 0.2202937 total: 83.9ms remaining: 0us Accuracy: 1.0