梦里什么样的问题可以用一个变量来编码?

梦里什么样的问题可以用一个变量来编码?

一键编码(也叫虚拟变量)是将一个分类变量转换成若干个二进制列的方法,其中1表示有属于该类别的行。显然,从机器学习的角度来看,它不适合对分类变量进行编码。

很明显,它增加了很多维度,但一般来说,维度越小越好。例如,如果将一个列设置为代表美国的州(如加利福尼亚和纽约),那么在单热编码方案中会多50个维度。

这样做不仅会给数据集增加很多维度,实际上并没有多少信息——有几个1分散在大量的0中。这使得优化变得困难,尤其是神经网络,其优化器很容易在大量空白维度中进入错误的空间。

更糟糕的是,每个稀疏信息列之间存在线性关系。这意味着一个变量可以很容易地被其他变量预测,这可能导致高维并行性和多个* * *线性问题。

最佳数据集包含了信息独立价值的特征,而单热编码可以创造完全不同的环境。当然,如果只有三个甚至四个类,那么单独热编码可能也不是一个坏的选择。然而,根据数据集的相对大小,其他替代方法可能值得探索。

目标代码可以有效地表示分类列,并且只占用一个特征空间。也叫均值编码,这一列的每一个值都被这一类的平均目标值代替。这样可以更直接的表达分类变量和目标变量之间的关系,也是一种非常流行的技术(尤其是在Kaggle比赛中)。

这种编码方法有一些缺点。首先,它使模型更难了解平均编码变量和另一个变量之间的关系。它只能根据与目标的关系在列中绘制相似度,有利有弊。

这种编码方式对Y变量非常敏感,会影响模型提取编码信息的能力。

由于此类别中的每个值都被相同的数值替换,因此模型可能会过度拟合它所看到的编码值(例如,将0.8与完全不同于0.79的值相关联)。这是将连续标度上的值视为严重重复的类处理的结果。因此,需要仔细监控Y变量是否有异常值。