随机森林回归。如何表示非常长的待处理类别列表

数据挖掘 数据集 回归 随机森林 阿帕奇火花
2021-09-16 07:42:09

我正在尝试建立一个模型来解决回归任务。

简化后,数据如下所示:

7.16, A 1, B 4, C 15, D 3
8.21, C 3, D 2, G  7, M 4, Y 9
1.85, D 3, N 1, L  1

第一列是一个标签,随后的列是一个类和相应的编号。

例如,第一行表明有一个A,四个B,十五个C和三个D - 这样的配置给我们 7.16。

我的主要问题:

如何表示我的数据以便拟合随机森林回归模型?

我的想法:

  1. 找出类的整个列表(有 26 个字母,但我有更多的类)并将所有未知类的零放入每个记录中。Vector.sparse()在这里可能会有所帮助,因为它可以减少所需的内存量。

  2. 找出类的整个列表,对应一个从 0 开始的数字,并将每条记录转换为一个向量(即第一个看起来):0 1 1 4 2 15 3 3。然后每列被视为一个单独的特征,但是在这种情况下,我必须指定我的一些特征是分类的,而这对于 Spark 是不可能的,因为不同的记录具有不同的长度(在 Spark 中,我必须提供特征列,这些特征与类的数量是分类的。在示例中将是一张地图(0 -> 26, 2 -> 26, 4 -> 26) - 就像每第二列是一个有 26 个类别的类)。

  3. 可以构建 A:1、B:4、C:15、D:3 等特征,并将它们全部视为分类。或者将决策负担(分类与连续)转移到 Spark 本身。

2个回答

如果问题是您事先不知道所有类别并且不同的记录具有不同的类别,那么散列技巧可能会有所帮助。

我认为你的第一种和最后一种方法是相同的——因此你有稀疏的特征向量。在您的最后一种方法中,您只是不列出值为 0 的功能。

很难说你应该使用分类值还是连续值——这取决于每个特征。