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

6
在Mllib版本的随机森林中,有一个参数可用于指定具有名义特征(数值但仍是分类变量)的列。
那么在ML随机森林中呢?在用户指南中,有一个例子使用了VectorIndexer将分类特征转换为向量,但它写着“自动识别分类特征,并对其进行索引”。
在其他讨论中讨论了同样的问题,发现无论如何,数值索引都会被视为连续特征,在随机森林中建议进行one-hot编码以避免这种情况,但在这种算法的情况下似乎没有意义,尤其是考虑到上述官方示例!
我还注意到,当分类列中有很多类别时(>1000),一旦使用StringIndexer进行索引,随机森林算法会要求我设置MaxBin参数,该参数应用于连续特征。 这是否意味着超过bin数量的特征将被视为连续特征,就像在官方示例中指定的那样,因此StringIndexer适用于我的分类列,或者是否意味着具有数值但仍为名义特征的整个列将被桶化,并假设变量是连续的?
1个回答

6
在同一问题的另一个讨论中,我发现在随机森林中数值索引被视为连续特征,但实际上这是不正确的。树模型(包括RandomForest)依赖于列元数据来区分分类和数值变量。元数据可以通过ML转换器(如StringIndexerVectorIndexer)或手动添加提供。旧的基于RDD的mllib API在内部由ml模型使用,用于相同的目的需要使用categoricalFeaturesInfo Map当前API仅获取元数据并将其转换为categoricalFeaturesInfo所期望的格式。

OneHotEncoding仅适用于线性模型,并且建议使用,尽管不是必需的,对于多项式朴素贝叶斯分类器也建议使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接