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, classification_report

# 1. Load the dataset
data = pd.read_csv('/Python/Housing.csv')

# Step 3: Preprocess the Data
# Convert categorical variables to numeric
categorical_features = ['mainroad', 'guestroom', 'basement', 'hotwaterheating', 'airconditioning', 'prefarea', 'furnishingstatus']
for col in categorical_features:
    data[col] = data[col].map({'yes': 1, 'no': 0})

# Target variable
X = data.drop('price', axis=1)
y = data['price']

# Step 4: Split the Data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Step 5: Train the Model
model = CatBoostClassifier(iterations=100, depth=6, learning_rate=0.1, random_seed=42, verbose=0)
model.fit(X_train, y_train)

# Step 6: Evaluate the Model
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
广告