介绍
如果热衷于学习数据科学和机器学习的学习者,他们应该学习增强系列算法。增强系列中有许多算法,例如AdaBoost、梯度提升、XGBoost等等。增强系列中的一个算法是CatBoost算法。CatBoost是一种机器学习算法,它代表分类提升。它是由Yandex开发的。它是一个开源库。它可以在Python和R语言中使用。CatBoost在数据集中的分类变量方面表现非常好。与其他提升算法类似,CatBoost也在后台创建多个决策树,即树的集合,来预测分类标签。它基于梯度提升。
另请阅读:CatBoost:一种自动处理分类(CAT)数据的机器学习库
学习目标
- 了解增强算法的概念及其在数据科学和机器学习中的重要性。
- 探索CatBoost算法作为增强系列成员之一,其起源及其在处理分类变量方面的作用。
- 理解CatBoost的关键特性,包括其处理分类变量、梯度提升、有序提升和正则化技术。
- 深入了解CatBoost的优点,如其对分类变量的强大处理能力和出色的预测性能。
- 学习在Python中实现CatBoost用于回归和分类任务,探索模型参数并对测试数据进行预测。
本文作为数据科学博客马拉松的一部分发表。
CatBoost的重要特性
- 处理分类变量: CatBoost在处理包含分类特征的数据集方面表现出色。通过使用各种方法,我们通过将它们转换为数值表示来自动处理分类变量。这包括目标统计、独热编码或两者的混合。这种能力通过省去手动分类特征预处理的要求,节省了时间和精力。
- 梯度提升: CatBoost使用梯度提升,一种集成技术,将多个弱学习器(决策树)组合起来创建有效的预测模型。通过添加训练和指导以纠正之前树引起的错误的树,迭代地创建树,同时最小化可微损失函数。这种迭代的方法逐步提高了模型的预测能力。
- 有序提升: CatBoost提出了一种称为“有序提升”的新技术,以有效处理分类特征。在构建树时,它使用一种称为基于排列的预排序分类变量的技术来识别最佳分割点。这种方法使得CatBoost能够考虑所有潜在的分割配置,提高预测并降低过拟合。
- 正则化: CatBoost使用正则化技术来减少过拟合并提高泛化能力。它在叶节点值上进行L2正则化,通过添加惩罚项修改损失函数以防止过大的叶节点值。此外,它使用一种先进的方法称为“有序目标编码”来避免在编码分类数据时过拟合。
CatBoost的优点
- 对分类变量的强大处理能力: CatBoost的自动处理使得预处理更加方便和有效。它不需要手动编码方法,并降低了与传统过程相关的信息丢失的机会。
- 出色的预测性能: 使用CatBoost的梯度提升框架和有序提升进行预测的结果通常是准确的。它可以生成强大的模型,在许多其他算法中表现优秀,并有效地捕捉数据中的复杂关系。
应用案例
在涉及表格数据的许多Kaggle竞赛中,CatBoost被证明是一种顶级表现者。CatBoost成功地应用于各种回归和分类任务。以下是一些成功使用CatBoost的实例:
- Cloudflare使用CatBoost来识别针对其用户网站的机器人。
- 总部位于迪拜的打车服务Careem使用CatBoost来预测其客户的下一次出行地点。
实现
由于CatBoost是一个开源库,请确保您已经安装了它。如果没有,请使用以下命令安装CatBoost包。
#安装CatBoost库
!pip install catboost
您可以使用Python和R语言来训练和构建catboost算法,但在此实现中我们只使用Python作为语言。
安装完CatBoost包后,我们将导入catboost和其他必要的库。
#导入库
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')
这里我们使用了Big Mart销售数据集,并进行了一些数据的合理性检查。
#上传数据集
os.chdir('E:\Dataset')
dt = pd.read_csv('big_mart_sales.csv')
dt.head()
dt.describe()
dt.info()
dt.shape
该数据集包含超过1k条记录和35个列,其中有8个列是分类变量,但我们不会将这些列转换为数值格式。Catboost本身可以做到这一点。这就是Catboost的神奇之处。您可以在模型参数中提及任意多个内容。我只为演示目的选择了“iteration”作为参数。
#导入CSV
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)
cat_var = np.where(X_train.dtypes != np.float)[0]
model = cb.CatBoostClassifier(iterations=10)
model.fit(X_train, y_train, cat_features=cat_var, plot=True)
有许多模型参数可以使用。下面是构建CatBoost模型时您可以提及的重要参数。
参数
- Iterations(迭代次数): 要构建的提升迭代次数或树的数量。较高的值可以带来更好的性能,但训练时间更长。它是一个从1到无穷大的整数值 [1, ∞]。
- Learning_rate(学习率): 梯度提升算法学习的步长。较低的数值使模型收敛更慢,但可能提高泛化性能。它应该是一个浮点值,范围从0到1
- Depth(深度): 集合中个体决策树的最大深度。虽然更深的树更容易过拟合,但它们可以捕捉到更复杂的交互作用。它是一个从1到无穷大的整数值 [1, ∞]。
- Loss_function(损失函数): 在训练过程中,我们应该优化损失函数。不同的问题类型,如二元分类的“Logloss”,多类分类的“MultiClass”,回归的“RMSE”等,有不同的解决方法。它是一个字符串值。
- l2_leaf_reg: 叶值经过L2正则化。较大的叶值受到较高的惩罚,有助于减少过拟合。它是一个浮点值,范围从0到无穷大 [0, ∞]。
- border_count: 数值特征的拆分数量。虽然较高的数字提供更准确的拆分,但也可能导致过拟合。对于较大的数据集,建议使用128。它是一个从1到255的整数值 [1, 255]。
- random_strength: 在选择拆分点时使用的随机性水平。较大的值引入更多的随机性,防止过拟合。范围:[0, ∞]。
- bagging_temperature: 控制训练实例抽样的强度。较大的值降低了bagging过程的随机性,而较小的值增加了随机性。它是一个浮点值,范围从0到无穷大 [0, ∞]。
对训练模型进行预测
#在测试集上进行模型预测
y_pred = model.predict(X_test)
print(accuracy_score(y_pred, y_test))
print(confusion_matrix(y_pred, y_test))
您还可以使用predict_proba()函数设置阈值值。在这里,我们实现了超过85%的准确率,考虑到我们并没有将任何分类变量处理成数字,这是一个不错的值。这显示了Catboost算法的强大之处。
结论
CatBoost是机器学习领域中的突破性和著名模型之一。它因其自己处理分类特征的能力而引起了很多关注。从本文中,您将学到以下内容:
- catboost的实际实现。
- catboost算法的重要特征是什么?
- catboost表现良好的使用案例
- 训练模型时catboost的模型参数
常见问题
本文中显示的媒体不归Analytics Vidhya所有,仅由作者自行决定使用。