Spark MLLib 2.0 管道中的分类特征

我正在尝试基于日志文件构建决策树。某些特征集很大,包含数千个唯一值。我试图在Java中使用新的管道和数据框惯用法。我为每个分类特征列构建了几个StringIndexer管道阶段。然后我使用VectorAssembler创建一个特征向量。在VectorAssembler阶段之后,结果数据框看起来对我来说非常完美。我的管道大致如下所示:

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

然而,我收到了以下错误:

决策树要求maxBins(= 32)至少要大于或等于每个分类特征的值数,但分类特征5有49个值。考虑移除这个及其他具有大量值的分类特征,或者添加更多训练示例。

我可以通过使用Normalizer来解决这个问题,但这样生成的决策树对于我的需求来说是不可用的,因为我需要生成具有原始特征值的DSL决策树。我无法手动设置maxBins,因为整个管道是同时执行的。我希望结果决策树具有StringIndexer生成的值(例如,特征5 <= 132)。另外,虽然不太重要,但我希望能够为特征指定自己的名称(例如,不是‘特征5’,而是‘域名’)。


回答:

决策树算法使用单个maxBins值来决定进行的分割数。默认值是(=32)。maxBins应该大于或等于分类特征的最大类别数。由于你的特征5有49个不同的值,你需要将maxBins增加到49或更高。

决策树算法有几个超参数,通过调整这些参数以适应你的数据可以提高准确性。你可以使用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])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注