gpt4 book ai didi

java - 管道中的 Spark MLLib 2.0 分类特征

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:02 27 4
gpt4 key购买 nike

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

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

但是我得到以下错误:

DecisionTree requires maxBins (= 32) to be at least as large as the number of values in each categorical feature, but categorical feature 5 has 49 values. Considering remove this and other categorical features with a large number of values, or add more training examples.

我可以使用 Normalizer 解决这个问题,但是生成的决策树无法满足我的需要,因为我需要生成具有原始特征值的 DSL 决策树。我无法手动设置 maxBins,因为整个管道是一起执行的。我希望生成的决策树具有 StringIndexer 生成的值(例如 Feature 5 <= 132)。此外,但不太重要的是,我希望能够为这些功能指定我自己的名称(例如,而不是“功能 5”,说“域”)

最佳答案

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])

关于java - 管道中的 Spark MLLib 2.0 分类特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38767786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com