【问题标题】:Spark MLLib 2.0 Categorical Features in pipelineSpark MLLib 2.0 管道中的分类特征
【发布时间】:2016-12-10 14:28:36
【问题描述】:

我正在尝试基于日志文件构建决策树。一些特征集很大,包含数千个唯一值。我正在尝试在 Java 中使用管道和数据框的新习语。我为每个分类特征列构建了一个带有多个 StringIndexer 管道阶段的管道。然后我使用 VectorAssembler 创建一个特征向量。在 VectorAssembler 阶段之后,生成的数据框对我来说看起来很完美。我的管道看起来大概像

StringIndexer->StringIndexer->StringIndexer->VectorAssembler->DecisionTreeClassifier

但是我收到以下错误:

DecisionTree 要求 maxBins (= 32) 至少与每个分类特征中的值的数量一样大,但分类特征 5 有 49 个值。考虑删除这个和其他具有大量值的分类特征,或者添加更多的训练示例。

我可以通过使用 Normalizer 解决此问题,但生成的决策树无法满足我的需求,因为我需要生成具有原始特征值的 DSL 决策树。我无法手动设置 maxBins,因为整个管道是一起执行的。我希望生成的决策树具有 StringIndexer 生成的值(例如 Feature 5

【问题讨论】:

    标签: java machine-learning apache-spark-mllib


    【解决方案1】:

    DecisionTree 算法采用单个 maxBins 值来决定要进行的拆分数量。默认值为 (=32)。 maxBins 应该大于或等于分类特征的最大类别数。由于您的功能 5 有 49 个不同的值,您需要将 maxBins 增加到 49 或更大。

    DecisionTree 算法有多个超参数,根据您的数据调整它们可以提高准确性。您可以使用 Spark 的交叉验证框架进行此调整,该框架会自动测试超参数网格并选择最佳参数。

    这里是 python 测试 3 maxBins [49, 52, 55] 的示例

    dt = DecisionTreeClassifier(maxDepth=2, labelCol="indexed")
    paramGrid = ParamGridBuilder().addGrid(dt.maxBins, [49, 52, 55]).addGrid(dt.maxDepth, [4, 6, 8]).addGrid(rf.impurity, ["entropy", "gini"]).build()
    pipeline = Pipeline(stages=[labelIndexer, typeIndexer, assembler, dt])
    

    【讨论】:

    • 原来我需要两件事:一个 VectorIndexer,其 MaxCategories 设置为大于最大分类特征数的计数,以及 DecisionTreeClassifier 的 maxBins 设置为大于最大数计数的值的分类特征。由于我的所有功能都是分类的,我最初指定了 MAX_INT,它生成了一个警告“DecisionTreeMetadata:DecisionTree reduction maxBins ...”。将这两个值设置为 DataFrame 中的样本数就足够了。
    • 只要你的特征都是分类的,你使用 VectorIndexer 是安全的,但如果你的训练有持续的特征,请小心。 VectorIndexer 根据 maxCategories 参数在连续和分类之间进行选择。它可以将连续特征变成分类特征。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。谢谢
    • 感谢您的跟进。 VectorIndexer 实际上是一个错误。该管道由一系列字符串索引器组成,然后是一个向量汇编器,最后是带有 .setMaxBins 调用的 DecisionTreeClassifier。正如您正确指出的那样,如果我们在组合中有一个连续的特征,我们就会遇到麻烦。我想知道其他人如何处理这个?很容易想象有一个具有大量值的分类特征和一个具有相对较少特征值的连续特征。
    • 我认为一个热编码器就是你想要的。使用它,您可以指定要视为分类的列。
    猜你喜欢
    • 2016-03-01
    • 2017-03-24
    • 2015-08-24
    • 2016-09-04
    • 2017-10-24
    • 2019-05-14
    • 2016-04-22
    • 2021-06-19
    • 2016-12-03
    相关资源
    最近更新 更多