接上一篇文章 CatBoost 模型中标称特征的处理 ,这篇说一下CatBoot中实现的标称特征处理方法。
可以查看官网原文 Transforming categorical features to numerical features。
CatBoost 支持两种类型的特征。一种是数值型,例如高度(182, 173)和任何人的二值特征(0, 1)。另外一种是标称型特征。只能取有限个可能的值,通常这些值是固定的,例如歌曲风格(“rock”, “indie”, “pop”)。
标称型特征处理流程
- 随机排列输入样例。
- 将标签转换成整型。根据机器学习问题,做不同的处理。
- 回归问题:离散化目标值。CatBoost 中有一个
Binarization
过程。开始是有一个参数K
, 目标值会离散到K+1
个桶中,每个值只在其中一个桶。这样,重新得到一个标签,取值从0
到K
。 - 分类问题:可能的目标值只有
0
和1
。 - 多分类问题:标签的值应该是整型的,并且从
0
开始。
- 回归问题:离散化目标值。CatBoost 中有一个
- 使用下面的方法将类别特征转换成数值型特征。CatBoost中根据开始设置的参数选择使用何种方法。回顾一下上一篇说的,有一个观察数据集 D = ( X i , Y i ) i = 1 … n \mathcal{D} = {(X_i ,Y_i )}_{i=1 \dots n} D=(Xi,Yi)i=1…n,随机排雷后得到序列 σ = ( σ 1 , … , σ n ) \sigma=(\sigma_1, \dots, \sigma_n) σ=(σ1,…,σn)。依次从 σ 1 \sigma_1 σ1到 σ n \sigma_n σn遍历该随机序列。
- Borders。使用这个公式将标称值的转换成数值,按标签所属的桶分别计算 i ∈ [ 0 , k − 1 ] i\in[0,k-1] i∈[0,k−1]。 c t r i = c o u n t I n C l a s s + p r i o r t o t a l C o u n t + 1 ctr_i=\frac{countInClass + prior }{totalCount + 1} ctri=totalCount+1countInClass+prior假设当前遍历到 σ k \sigma_k σk ( k < n ) (k<n) (k<n),对应的标称特征的值是