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

时间:2017-10-15 20:42:27

标签: apache-spark apache-spark-mllib random-forest apache-spark-ml feature-engineering

在随机森林的Mllib版本中,有可能使用参数categoricalFeaturesInfo指定具有名义特征(数字但仍然是分类变量)的列 关于ML随机森林的内容是什么?在使用VectorIndexer的用户指南there is an example中,该VectorIndexer也会转换向量中的分类要素,但它已写入"自动识别分类要素,并将其编入索引"

In the other discussion of the same problem我发现数字索引在随机森林中无论如何都被视为连续特征,并且建议进行单热编码以避免这种情况,这在以下情况下似乎没有意义。这个算法,特别是给出了上面提到的官方例子!

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

1 个答案:

答案 0 :(得分:3)

  

在对同一问题的另一个讨论中,我发现在随机森林中无论如何都将数字索引视为连续特征,

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

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

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