首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark MLLib 2.0流水线分类特征

Spark MLLib 2.0流水线分类特征
EN

Stack Overflow用户
提问于 2016-08-04 12:47:41
回答 1查看 6.2K关注 0票数 4

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

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

但是,我得到了以下错误:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-05 05:50:39

DecisionTree算法只需要一个maxBins值就可以确定要使用的拆分数。默认值为(=32)。maxBins应该大于或等于分类特性的最大类别数。因为您的特性5有49个不同的值,所以需要将maxBins增加到49或更高。

DecisionTree算法有几个超参数,将它们调到数据中可以提高精度。您可以使用Spark的交叉验证框架进行此优化,该框架自动测试超参数网格并选择最佳。

下面是python测试3 maxBins 49,52,55的例子

代码语言:javascript
复制
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])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38767786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档