CatBoost - 核心引數



CatBoost 是一個非常有用的機器學習庫,用於需要分類和迴歸的應用程式。您可以使用程式碼引數來擬合您的資料集和您正在處理的特定問題。為了提高模型的準確性,避免過擬合併加快訓練速度,您應該在模型中使用這些引數。

核心引數

CatBoost 中的核心引數是主要配置,對模型的行為和功能有重大影響。除其他事項外,這些引數控制整體訓練過程中的訓練迭代次數、學習率、樹深度和損失函式。

使用 CatBoost 時,您可以控制許多引數。下面列出了一些核心引數:

關鍵引數

模型在訓練時學習的內部設定稱為公共引數。例如,決策樹中的分割點和葉值就是引數。CatBoost 的訓練過程可以透過修改許多設定來進行設定。讓我們來看一些重要的 CatBoost 引數及其功能:

  • iterations: 表示迭代次數。每次迭代都會向整合中新增一個新的模型。

  • learning_rate: 表示每次迭代的改程序度。較低的學習率意味著更穩定的收斂,但可能延遲收斂。

  • depth: 表示樹的最大深度。更深的樹允許更復雜的連線,但也可能導致過擬合。

  • loss_function: 此損失函式用於評估模型在訓練時的效能。常見的選項包括用於迴歸的 RMSE、用於多分類的 CrossEntropy 和用於二元分類的 Logloss。

  • eval_metric: 在訓練時使用的模型效能指標。

  • random_seed: 用於確保可重複性的隨機種子。

常用引數

以下是列出的常用引數,主要用於 Python 包、R 包和命令列版本:

1. loss_function

主要用於確定您正在解決哪種問題,例如分類或迴歸,以及要最佳化的指標。要使用此引數,您可以將其設定為諸如“Logloss”(分類)或“RMSE”(迴歸)之類的值。

命令列:

--loss-function

2. custom_metric

使用 custom_metric,您可以在訓練時監控額外的指標。這些指標僅供您參考,不會用於最佳化模型。要使用此引數,您需要列出要跟蹤的指標,但這不會影響整體模型效能。

命令列:

--custom-metric

3. eval_metric

用於檢查模型在訓練時的執行情況以及查詢過擬合。此指標有助於選擇最佳模型。您可以選擇適合您問題的指標,例如分類的“Accuracy”。

命令列:

--eval-metric

4. iterations

此引數設定 CatBoost 將構建的樹(迭代)的數量。更多的迭代可以提高準確性,但也可能增加訓練時間。

命令列:

-i, --iterations

5. learning_rate

學習率控制模型學習的速度。較小的值會導致更高的準確性,但需要更多迭代。

命令列:

-w, --learning-rate

6. random_seed

透過固定隨機種子值來確保每次訓練模型時都能獲得相同的結果。

命令列:

-r, --random-seed

7. l2_leaf_reg

此引數新增 L2 正則化以防止過擬合。增加此值可以幫助減少過擬合。

命令列:

--l2-leaf-reg

8. bootstrap_type

定義訓練期間對物件權重進行取樣的方法。選項包括“Bayesian”、“Bernoulli”等。

命令列:

--bootstrap-type

9. bagging_temperature

這調整了訓練期間資料取樣中的隨機量。較高的值會增加更多的隨機性。

命令列:

--bagging-temperature

10. subsample

此引數控制用於訓練每棵樹的資料百分比。小於 1 的值僅使用一部分資料。

命令列:

--subsample

11. depth

樹的深度決定了模型的複雜程度。更深的樹可以模擬更復雜的模式,但也可能導致過擬合。

命令列:

-n, --depth

12. grow_policy

定義生長樹的策略。可以選擇不同的策略,具體取決於問題和資料集。

命令列:

--grow-policy

13. min_data_in_leaf

這設定了葉節點中必須存在的最小資料點數。透過防止對小樣本進行分割,它有助於避免過擬合。

命令列:

--min-data-in-leaf

14. max_leaves

此引數控制樹中最大葉節點數。僅與特定的樹生長策略一起使用。

命令列:

--max-leaves

15. ignored_features

您可以透過指定其索引或名稱來從模型中排除某些特徵。如果某些特徵不相關,這將非常有用。

命令列:

-I, --ignore-features

16. one_hot_max_size

此引數將獨熱編碼應用於具有少量唯一值(低於指定限制)的類別特徵。

命令列:

--one-hot-max-size

17. class_weights

此引數允許您為不同的類別分配不同的權重,尤其是在資料不平衡(一個類別的示例少得多)時非常有用。

命令列:

--class-weights

使用常用引數的 CatBoost 示例

以下是如何使用一些常用引數構建 CatBoost 模型的示例。此 Python 程式碼示例演示瞭如何使用這些引數:

# Import the necessary libraries
from catboost import CatBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Load the Iris dataset as an example
data = load_iris()
X = data['data']
y = data['target']

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initialize CatBoostClassifier with common parameters
model = CatBoostClassifier(
   # Number of trees 
   iterations=100,              
   # Learning rate
   learning_rate=0.1,           
   # Depth of the trees
   depth=6,                     
   # Loss function for multi-class classification
   loss_function='MultiClass',  
   # Metric for evaluating performance
   eval_metric='Accuracy',      
   # Random seed for reproducibility
   random_seed=42,              
   # L2 regularization to prevent overfitting
   l2_leaf_reg=3.0,             
   # Bootstrap method for bagging
   bootstrap_type='Bernoulli',   
   # Silent mode, no training output
   verbose=False                 
)

# Train the model
model.fit(X_train, y_train, eval_set=(X_test, y_test))

# Make predictions
y_pred = model.predict(X_test)

# Evaluate the model
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')

輸出

這將生成以下結果

Accuracy: 1.0000
廣告
© . All rights reserved.