CatBoost - 分类器

CatBoost 分类器是处理分类问题的有用工具,特别是在处理包含分类变量的数据时。梯度提升是其核心方法,将多个弱模型组合成一个强大的模型。CatBoost 的主要功能之一是它能够处理分类数据而无需将其转换为数值。

现在我们将介绍如何使用 CatBoost 分类器。我们将举一个例子,我们想使用某些数据来预测某事。

使用 CatBoostClassifier 的步骤

现在让我们逐步介绍使用 CatBoost 分类器的步骤 −

1. 准备数据

数据:必须获取一组数据才能训练模型。假设您有一个人员名单,包括他们的年龄、性别和薪水。您想预测每个人是否都会购买某种产品。这里 −

  • 特征 (X):具体信息,如年龄、性别和价格。

  • 标签 (y):响应,包括他们是否购买了该商品。

  • 训练数据:这是模型将从中学习的数据。

  • 测试数据:这是您将用来查看模型是否运行良好的数据。

示例

以下是如何准备数据的示例 −

X_train, X_test, y_train, y_test = train_test_split (data, labels, test_size=0.2)

2. 构建 CatBoost 分类器

接下来,生成 CatBoost 模型。您可以更改许多参数,例如 −

  • 迭代次数:它将生成多少个小模型或树。每棵树都会从先前的错误中学习。

  • 学习率:模型的学习率。如果太快,模型可能会错过重要细节。如果太慢,则需要很长时间才能学习。

  • 深度:这是树的整体深度。随着深度的增加,模型可以捕获越来越复杂的特征,但过度拟合的可能性也会增加。

示例

以下是如何构建 catboost 分类器的示例 −

model = CatBoostClassifier (iterations=1000, learning_rate=0.1, depth=6)

3. 训练模型

一旦数据和模型可用,就需要训练模型。这表明模型将查看训练数据并尝试找到任何模式。这里 fit 命令告诉模型从训练数据(X_train 和 y_train)中学习。而 verbose=100 表示模型将每 100 次迭代显示其进度,以便您可以看到它是如何学习的。

model.fit (X_train, y_train, verbose=100)

4. 进行预测

模型训练后,您可以使用它进行预测。例如,当您为其提供新数据 (X_test) 时,它将预测结果 (y_test)。

preds = model.predict(X_test)

5. 评估模型

做出预测后,您必须评估模型的性能。一种方法是检查模型预测的准确性。

accuracy = accuracy_score(y_test, preds)
print(f"Accuracy is: {accuracy}")

使用 CatBoostClassifier 的示例

我们将使用 Housing.csv 数据集来展示如何创建 CatBoost 分类器模型。要创建模型,我们将遵循上述步骤 −

import pandas as pd
from catboost import CatBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classes_report

# 1. 加载数据集
data = pd.read_csv('/Python/Housing.csv')

# 步骤 3:预处理数据
# 将分类变量转换为数字
categorical_features = ['mainroad', 'guestroom', 'basement', 'hotwaterheating', 'airconditioning', 'prefarea', 'furnishingstatus']
for col in categorical_features:
    data[col] = data[col].map({'yes': 1, 'no': 0})

# 目标变量
X = data.drop('price', axis=1)
y = data['price']

# 步骤 4:拆分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 步骤 5:训练模型
model = CatBoostClassifier(iterations=100,depth=6,learning_rate=0.1,random_seed=42,verbose=0)
model.fit(X_train, y_train)

# 步骤 6:评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f"Accuracy: {accuracy:.2f}")
print("Classification Report:")
print(report)

输出

结果如下 −

Accuracy: 0.00
Classification Report:
              precision    recall  f1-score   support

     1750000       0.00      0.00      0.00       1.0
     1820000       0.00      0.00      0.00       1.0
     1890000       0.00      0.00      0.00       2.0
     2100000       0.00      0.00      0.00       1.0
     2233000       0.00      0.00      0.00       1.0
     . 
     . 
     .
     9800000       0.00      0.00      0.00       2.0
    10150000       0.00      0.00      0.00       1.0
    12250000       0.00      0.00      0.00       1.0
    13300000       0.00      0.00      0.00       1.0

    accuracy                           0.00     109.0
   macro avg       0.00      0.00      0.00     109.0
weighted avg       0.00      0.00      0.00     109.0