进行 One-Hot 编码或不进行 One-Hot 编码

To One-Hot encode or not to One-Hot encode

我的数据集有星期几(周一 = 1,周二 = 2,周三 = 3 ...)

我的数据是这样的

WeekDay Col1 Col2 Target
1       2.2  8    126
6       3.5  4    354
1       8.0  2    322
3       7.2  4    465
7       3.2  5    404
6       3.8  3    134
1       3.6  5    455
1       5.5  8    345
6       7.0  6    442

我是否可以对 WeekDay 进行一次性编码,使其看起来像这样?

WeekDay Col1 Col2 Target  Mo Tu We Th Fr Sa Su
1       2.2  8    126     1  0  0  0  0  0  0
6       3.5  4    354     0  0  0  0  0  1  0
1       8.0  2    322     1  0  0  0  0  0  0
3       7.2  4    465     0  0  1  0  0  0  0
7       3.2  5    404     0  0  0  0  0  0  1
6       3.8  3    134     0  0  0  0  0  1  0
1       3.6  5    455     1  0  0  0  0  0  0
1       5.5  8    345     1  0  0  0  0  0  0
6       7.0  6    442     0  0  0  0  0  1  0

我要使用随机森林

一般来说,在使用随机森林之前最好先使用 One-Hot-Encoding。如果这只是您数据集中的分类变量,则选择 One-hot-Encoding。如果您使用 R 的随机森林,那么据我所知,R 的库会自行处理它。 scikit-learn 情况并非如此,您必须 one-hot 自己编码。有一个权衡。 One-Hot 编码引入了稀疏性,如果分类变量的基数很大,或者换句话说,分类变量中有很多唯一值,这对于 tree-based 模型来说是不可取的。但是,Python 的 catboost 处理分类变量。

您不应该使用一种热编码,因为您使用的是随机森林模型。 RF 模型也能够从标签编码中找到模式,并且通常 RF 模型在使用一种热编码时表现更差,因为它们可能决定在创建树时浪费几天时间。此外,一种热编码会在您的数据中引入维数灾难,这从来都不是一件好事。

在线性回归或逻辑回归等方法的情况下,一个热编码更好,其中 1 即星期一可能比 6 即星期六更重要,因为这些模型在后端有乘法模型。