CatBoost算法是提升算法家族中的一员,由Yandex开发,是一个开源的机器学习库,支持Python和R语言。它特别擅长处理数据集中的分类变量。与其他提升算法一样,CatBoost在后台创建多个决策树,即树的集成,以预测分类标签。它基于梯度提升技术。
CatBoost算法的核心特点包括对分类变量的处理、梯度提升、有序提升和正则化技术。CatBoost能够自动处理包含分类特征的数据集,通过将分类变量转换为数值表示,包括目标统计、独热编码或两者的混合。这种能力节省了手动预处理分类特征的时间和努力。
CatBoost使用梯度提升技术,这是一种集成技术,通过结合多个弱学习器(决策树)来创建有效的预测模型。通过添加训练有素的树来纠正前一棵树造成的错误,以迭代的方式创建树,同时最小化可微分的损失函数。这种迭代方法逐步提高了模型的预测能力。
CatBoost提出了一种名为“有序提升”的新技术,有效处理分类特征。在构建树时,它使用一种称为排列驱动的预排序分类变量的技术来确定最优的分割点。这种方法使CatBoost能够考虑所有可能的分割配置,提高预测并降低过拟合。
CatBoost使用正则化技术来减少过拟合并提高泛化能力。它在叶值上使用L2正则化,通过向损失函数添加惩罚项来防止叶值过大。此外,它还使用一种称为“有序目标编码”的先进方法,在编码分类数据时避免过拟合。
CatBoost算法的优势在于其对分类变量的强大处理能力,以及出色的预测性能。使用CatBoost的梯度提升框架和有序提升,预测结果通常非常准确。它能够产生强大的模型,超越许多其他算法,并有效地捕捉数据中的复杂关系。
CatBoost算法在多个Kaggle比赛中表现出色,成功应用于各种回归和分类任务。以下是CatBoost成功应用的一些实例:
CatBoost是一个开源库,确保已经安装了它。如果没有,以下是安装CatBoost包的命令。
!pip install catboost
可以在Python和R语言中训练和构建CatBoost算法,但本文只使用Python作为实现语言。
#导入库
import pandas as pd
import os
import matplotlib.pyplot as plt
import seaborn as sns
import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
import warnings
warnings.filterwarnings('ignore')
这里使用大型超市销售数据集,并执行一些数据一致性检查。
#上传数据集
os.chdir('E:\Dataset')
dt = pd.read_csv('big_mart_sales.csv')
数据集包含超过1k条记录和35列,其中8列是分类的,但不会将这些列转换为数值格式。CatBoost本身就可以做到这一点。这是CatBoost的魔力。可以在模型参数中提到任何想要的东西。只是为了演示目的只取了“迭代”作为参数。
X = dt.drop('Attrition', axis=1)
y = dt['Attrition']
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=14)
print(X_train.shape)
print(X_test.shape)
CatBoost模型有许多模型参数可以使用。以下是构建CatBoost模型时可以提到的一些重要参数。
#在测试集上进行模型预测
y_pred = model.predict(X_test)
print(accuracy_score(y_pred, y_test))
print(confusion_matrix(y_pred, y_test))