标称属性
标称属性的值仅仅只是不同的名字,标称值只提供只够的信息以区分对象。只可以使用的数学运算符 = = =和 ̸ = \not = ̸=,所以不能在二分决策树中直接使用。
标称属性的处理
独热编码
标称属性的一般处理方法是 one hot encoding(独热编码),可以在预处理阶段或者训练期间完成。
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,其中
X
i
=
(
x
i
,
1
,
…
,
x
i
,
m
)
X_i = (x_{i,1} ,\dots,x{i,m})
Xi=(xi,1,…,xi,m)是一个包含
m
m
m个特征的向量。一些是数值型特征,一些是标称型特征。
Y
i
∈
R
Y_i \in \mathbb{R}
Yi∈R是标签的值。
1.最简单的处理方式,是用整个训练集中,标称值对应的所有标签的平均值替换该标称值。所以
x
i
,
k
x_{i,k}
xi,k用
∑
j
=
1
n
[
x
j
,
k
=
x
i
,
k
]
⋅
Y
i
∑
j
=
1
n
[
x
j
,
k
=
x
i
,
k
]
\frac{\sum_{j=1}^n[x_{j,k}=x_{i,k}] \cdot Y_i}{\sum_{j=1}^n[x_{j,k}=x_{i,k}]}
∑j=1n[xj,k=xi,k]∑j=1n[xj,k=xi,k]⋅Yi替换。
[
⋅
]
[\cdot]
[⋅]是Iverson brackets(指示函数),方括号内两个元素相等时取1,否则取0。
i.e.
[
x
j
,
k
=
x
i
,
k
]
=
{
1
x
j
,
k
=
x
i
,
k
0
otherwise
[x_{j,k}=x_{i,k}]=\begin{cases} 1 &\text{$x_{j,k}=x_{i,k}$}\\ 0 &\text{otherwise} \end{cases}
[xj,k=xi,k]={10xj,k=xi,kotherwise
这个处理过程,显然会造成过拟合。比如,某个标称值
x
i
,
k
x_{i,k}
xi,k只有一条记录,则这个标称值转换成数字后就等于该记录的标签值。
2.克服该问题的一种直接方法是将数据集分成两部分,仅使用一部分来计算统计数据,第二部分用于执行训练。这中方式减少了过度拟合,但也减少了用于训练模型和计算统计信息数据的数据量。
3.论文中说,CatBoost 使用了一种更有效的策略,可减少过拟合,而且允许使用整个数据集进行培训。为训练集生成一个随机序列,即打乱数据集的顺序。假设原来的顺序是
1
,
2
,
⋯
 
,
n
1,2,\cdots,n
1,2,⋯,n,打乱后的序列是
σ
=
(
σ
1
,
…
,
σ
n
)
\sigma=(\sigma_1, \dots, \sigma_n)
σ=(σ1,…,σn)。从
σ
1
\sigma_1
σ1到
σ
n
\sigma_n
σn一次遍历随机序列,用遍历到的前p个记录计算标称特征的数值。
σ
p
,
k
\sigma_{p,k}
σp,k 用如下数值替换:
∑
j
=
1
p
[
x
j
,
k
=
x
i
,
k
]
⋅
Y
i
+
a
⋅
P
∑
j
=
1
n
[
x
j
,
k
=
x
i
,
k
]
+
a
\frac{\sum_{j=1}^p[x_{j,k}=x_{i,k}] \cdot Y_i + a \cdot P}{\sum_{j=1}^n[x_{j,k}=x_{i,k}] + a}
∑j=1n[xj,k=xi,k]+a∑j=1p[xj,k=xi,k]⋅Yi+a⋅P
相比上面的第一步的示例,这里添加了一个先验值
P
P
P和参数
a
>
0
a \gt 0
a>0。添加先验值是一种常见做法,它有助于减少从低频类别中获得的噪音。对应回归任务,计算标签的平均值作为先验值;对于二分任务,将正类的出现概率作为先验值。
4.使用几种排列也是有效的。 但可以看出,直接使用几种排列计算的统计数据将会导致过拟合。CatBoost 表示,他使用一种新颖的模式来计算叶子的值,这种方式允许使用几个排列而不会造成过拟合问题。
标称属性的组合
多个标称特征的组合可以作为一个新的特征(交互特征)。但是,组合的数量随着数据集中的标称特征的数量呈指数增长,所以不可能在算法中考虑所有这些交互特征。在创建当前树的分割节点时,CatBoost 以贪婪的方式考虑组合。在构建树的第一个分割节点时不考虑组合特征。对于下一个拆分,CatBoost 将当前树中存在的所有组合和分类特征与数据集中的所有分类特征组合在一起。组合值即时转换为数字。CatBoost 还以下列方式生成数字和分类特征的组合:在树中选择的所有分割都被视为具有两个值的分类,并以与分类相同的方式组合使用。
重要实现的细节
另一种用数值替代类别的方法是计算该类别在数据集中的出现次数。这是一种简单但功能强大的技术,它在CatBoost中实现。 还会针对组合特征计算此类统计数据。
为了在CatBoost算法的每个步骤中拟合最优先验,我们考虑几个先验并为它们分别构建一个特征,这在质量方面比上面提到的标准技术更有效。