如何处理最新的 Spark 随机森林中的分类特征?

How handle categorical features in the latest Random Forest in Spark?

在随机森林的 Mllib 版本中,可以使用参数 categoricalFeaturesInfo 指定具有标称特征(数字但仍然是分类变量)的列 ML 随机森林怎么样?在使用 VectorIndexer 的用户指南 there is an example 中,它也将分类特征转换为向量,但写成 "Automatically identify categorical features, and index them"

我发现数字索引在随机森林中无论如何都被视为连续特征,建议进行单热编码以避免这种情况,这在这种算法中似乎没有意义,尤其是上面提到的官方例子!

我还注意到,当分类列中有很多类别(> 1000)时,一旦它们被 StringIndexer 索引,随机森林算法要求我设置 MaxBin 参数,应该与连续特征一起使用。这是否意味着超过 bin 数量的特征将被视为连续的,as it's specified in the official example,,因此 StringIndexer 对于我的分类列是可以的,还是意味着具有数字仍然是标称特征的整个列将根据假设进行分桶变量是连续的?

In the other discussion of the same problem I found that numerical indexes are treated as continuous features anyway in random forest,

这实际上是不正确的。树模型(包括 RandomForest)依赖于列元数据来区分分类变量和数值变量。元数据可以由 ML 转换器(如 StringIndexerVectorIndexer)或 提供。 mllib 基于 RDD 的旧 API 由 ml 模型内部使用,使用 categoricalFeaturesInfo Map 用于相同目的。

Current API 只获取元数据并转换为 categoricalFeaturesInfo 所期望的格式。

OneHotEncoding 仅对线性模型是必需的,建议使用 for multinomial naive Bayes classifier.

,但不是必需的