在 Apache Spark 中,RandomForestClassifier 的输入带有无效标签列错误

2023-12-07

我正在尝试使用 SCALA 中的随机森林分类器模型使用 5 倍交叉验证来找到准确性。但我在运行时收到以下错误:

java.lang.IllegalArgumentException:RandomForestClassifier 的输入带有无效的标签列标签,但没有指定类的数量。请参阅字符串索引器。

在行---> val cvModel = cv.fit(trainingData) 处出现上述错误

我使用随机森林对数据集进行交叉验证的代码如下:

import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.tuning.{ParamGridBuilder, CrossValidator}
import org.apache.spark.ml.classification.RandomForestClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint

val data = sc.textFile("exprogram/dataset.txt")
val parsedData = data.map { line =>
val parts = line.split(',')
LabeledPoint(parts(41).toDouble, 
Vectors.dense(parts(0).split(',').map(_.toDouble)))
}


val splits = parsedData.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0)
val test = splits(1)

val trainingData = training.toDF()

val testData = test.toDF()

val nFolds: Int = 5
val NumTrees: Int = 5

val rf = new     
RandomForestClassifier()
      .setLabelCol("label")
      .setFeaturesCol("features")
      .setNumTrees(NumTrees)

val pipeline = new Pipeline()
      .setStages(Array(rf)) 

val paramGrid = new ParamGridBuilder()
          .build()

val evaluator = new  MulticlassClassificationEvaluator()
    .setLabelCol("label")
    .setPredictionCol("prediction")
    .setMetricName("precision") 

val cv = new CrossValidator()
   .setEstimator(pipeline)
   .setEvaluator(evaluator) 
   .setEstimatorParamMaps(paramGrid)
   .setNumFolds(nFolds)

val cvModel = cv.fit(trainingData)

val results = cvModel.transform(testData)
.select("label","prediction").collect

val numCorrectPredictions = results.map(row => 
if (row.getDouble(0) == row.getDouble(1)) 1 else 0).foldLeft(0)(_ + _)
val accuracy = 1.0D * numCorrectPredictions / results.size

println("Test set accuracy: %.3f".format(accuracy))

任何人都可以解释一下上面代码中的错误是什么。


RandomForestClassifier与许多其他 ML 算法一样,需要在标签列上设置特定的元数据,并且标签值是 [0, 1, 2 ..., #classes) 中表示为双精度的整数值。通常这是由上游处理的Transformers like StringIndexer。由于您手动转换标签,因此未设置元数据字段,并且分类器无法确认是否满足这些要求。

val df = Seq(
  (0.0, Vectors.dense(1, 0, 0, 0)),
  (1.0, Vectors.dense(0, 1, 0, 0)),
  (2.0, Vectors.dense(0, 0, 1, 0)),
  (2.0, Vectors.dense(0, 0, 0, 1))
).toDF("label", "features")

val rf = new RandomForestClassifier()
  .setFeaturesCol("features")
  .setNumTrees(5)

rf.setLabelCol("label").fit(df)
// java.lang.IllegalArgumentException: RandomForestClassifier was given input ...

您可以使用重新编码标签列StringIndexer:

import org.apache.spark.ml.feature.StringIndexer

val indexer = new StringIndexer()
  .setInputCol("label")
  .setOutputCol("label_idx")
  .fit(df)

rf.setLabelCol("label_idx").fit(indexer.transform(df))

or 手动设置所需的元数据:

val meta = NominalAttribute
  .defaultAttr
  .withName("label")
  .withValues("0.0", "1.0", "2.0")
  .toMetadata

rf.setLabelCol("label_meta").fit(
  df.withColumn("label_meta", $"label".as("", meta))
)

Note:

使用创建的标签StringIndexer取决于频率而不是值:

indexer.labels
// Array[String] = Array(2.0, 0.0, 1.0)

PySpark:

在 Python 中,元数据字段可以直接在模式上设置:

from pyspark.sql.types import StructField, DoubleType

StructField(
    "label", DoubleType(), False,
    {"ml_attr": {
        "name": "label",
        "type": "nominal", 
        "vals": ["0.0", "1.0", "2.0"]
    }}
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Apache Spark 中,RandomForestClassifier 的输入带有无效标签列错误 的相关文章

  • 重塑案例类构造函数?

    试图找到一种方法来 重塑 案例构造函数以填充某些默认值 以下情况可能吗 def reshape T R1 lt HList R2 lt HList h R1 R2 gt T example case class MyClass a Doub
  • AssertionError:断言失败:没有在 Databricks 中进行 DeleteFromTable 的计划

    这个命令运行良好有什么原因吗 sql SELECT FROM Azure Reservations WHERE timestamp gt 2021 04 02 返回 2 行 如下 sql DELETE FROM Azure Reservat
  • Scala - 如何解决“值不是 Nothing 的成员”错误

    此示例代码基于 Atmosphere 类 但如果有人可以让我了解该错误的一般含义 我想我可以找出任何特定于 Atmosphere 的解决方案 val bc BroadcasterFactory getDefault lookup broad
  • Pyspark显示最大值(S)和多重排序

    感谢这里的一些帮助 使用Pyspark 请不能使用SQL 所以我有一个存储为 RDD 对的元组列表 城市1 2020 03 27 X1 44 城市1 2020 03 28 X1 44 City3 2020 03 28 X3 15 City4
  • 新式(“内联”)宏需要 scala.meta

    我刚刚更新到 scala meta 2 0 0 M1 和最新的 scala 2 12 3 现在宏不再编译 我所做的唯一更改是将元版本从 1 8 0 更改为 2 0 0 M1 错误 新式 内联 宏需要 scala meta 有谁知道是否有快速
  • 对于空列表,max() 应该返回什么?

    Got java util NoSuchElementException head of empty list所以我试着检查一下 但现在我明白了 info max of a few numbers FAILED info 0 did not
  • 如何使用 apply/unapply 方法重现案例类行为?

    我尝试用普通类和伴生对象替换案例类 但突然出现类型错误 编译良好的代码 综合示例 trait Elem A B def C other Elem C A Elem C B other match case Chain head tail g
  • 并行化随机森林

    通过搜索和询问 我发现了许多可以用来利用服务器所有核心的软件包 以及许多可以进行随机森林的软件包 我对此很陌生 并且在并行随机森林训练的所有方法中迷失了方向 您能否就使用和 或避免它们中的每一个或它们的某些特定组合 以及有或没有caret
  • Scala:具有复杂结构的树插入尾递归

    我正在 scala 中创建自定义对象树 并且我的插入方法引发堆栈溢出 因为它不是尾递归 但是 我不太清楚如何使其尾递归 我见过使用 累加器 变量的相关示例 但它们要么是只能相乘和覆盖的整数之类的东西 要么是我在适应树时遇到困难的列表 这是我
  • Spark SQL如何读取压缩的csv文件?

    我尝试过使用apispark read csv读取带有扩展名的压缩 csv 文件bz or gzip 有效 但在源代码中我没有找到任何可以声明的选项参数codec type 即使在这个link https github com databr
  • 使用 to_categorical 转换 np.array 时出现内存问题

    我有一个像这样的 numpy 数组 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 我这样改造它以减少内存需求 x val x val asty
  • 如何从 SparkSQL DataFrame 中的 MapType 列获取键和值

    我的镶木地板文件中有数据 该文件有 2 个字段 object id String and alpha Map lt gt 它被读入 SparkSQL 中的数据帧 其架构如下所示 scala gt alphaDF printSchema ro
  • Scikit-learn - ValueError:输入包含 NaN、无穷大或对于随机森林的 dtype('float32') 来说太大的值

    首先 我检查了有关此错误的不同帖子 但没有一个可以解决我的问题 因此 我使用随机森林 并且能够生成森林并进行预测 但有时在森林的生成过程中 我会收到以下错误 ValueError 输入包含 NaN 无穷大或对于 dtype float32
  • 获取:导入 Spark 模块时出错:没有名为“pyspark.streaming.kafka”的模块

    我需要将从 pyspark 脚本创建的日志推送到 kafka 我正在做 POC 所以在 Windows 机器上使用 Kafka 二进制文件 我的版本是 kafka 2 4 0 spark 3 0 和 python 3 8 1 我正在使用 p
  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • 错误:协变类型 A 出现在逆变位置

    我试图写一个不可变的Matrix A 班级 我希望该类是协变的A但是当我把 在 前面A编译器开始抱怨类中的某些操作 以下是我的相关子集Matrix类 实际类比以下子集大 5 倍左右 class Matrix A private val co
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将

随机推荐

  • 出现在表单提交上的 jQuery Modal

    我有这样的代码 当用户提交表单时运行 这是为了阻止他们重新提交表单或离开页面并让他们知道表单正在执行某些操作 var lastx 0 var loadingAnim setInterval function UpdateSpinner lo
  • WPF:我可以重新设置复选框模板的样式吗,以便检查指示器变为红叉

    我找不到重新设置复选框 IsChecked 指示器样式的方法 正如我从复选框模板中看到的那样 无法重新设置指示器的样式 只能重新设置复选框的 框 有谁知道是否可以重新设置 IsChecked 指示器的样式 您必须替换整个 CheckBox
  • terraform 后端 s3 存储桶创建返回 403 w/ Terraform 0.11.1

    如何创建有权放置 terraform tfstate 文件的 S3 存储桶 如何将 tfstate 放入桶中 执行此操作的正确方法是什么 作为序言 我花了 6 个多小时试图解决这个问题 我看到了类似的帖子由 MFA 引起的问题 那不是我的问
  • z3 处理非线性实数运算的局限性

    我有一个程序可以生成非线性实数算术中的一组约束 考虑以下两个约束 gt v0 x v2 x v1 y v2 y v3 x v2 x v3 x v2 x v3 y v2 y v3 y v2 y v0 y v2 y v3 x v2 x v1 x
  • 是否可以禁用链接的工具提示?

    我的链接上没有设置任何标题或 alt 标签 因此当我悬停或单击并按住链接时 IE10 会使用 href 内容作为工具提示 我一直在四处寻找 但找不到任何覆盖此功能的解决方案 Update 我已经找到了解决我遇到的另一个问题的方法 当你触摸并
  • Node.js 套接字解释

    我正在构建一个应用程序 它将对远程 API 服务器进行大约一百万次调用 我可以将连接数量限制为例如 10 个吗 我将最大套接字设置为 10 可以吗 我试图了解这些参数的作用 keepAlive false maxSockets 999 ma
  • Google Analytics - 将 UserID 与我网站的帐户 ID 相匹配

    我的每个注册客户都有唯一的帐户 ID 例如 代理人编号 00173393 我想检索此信息通过谷歌分析 这不是个人信息 仅供统计使用 我实现了 userID 但是如何匹配用户 ID 和帐户 ID 是否可以为帐户 ID 号创建变量 你为什么不使
  • 十二要素应用程序:与配置指南保持一致的方法

    我正在写一篇关于十二因素应用程序的论文 我想知道你是否可以在这里帮助我 十二要素应用程序的第三要素指出 在环境中存储配置 https 12factor net config 根据该页面 部署之间可能有所不同的所有配置都应提取到环境变量中 我
  • X 轴日期 - .Net 图表

    我正在 Net Charts 工作 我想在 X 轴上显示日期 例如 如果我选择过去 52 周 那么我应该显示过去 52 周的图表 而这 52 周的开始日期应该位于 x 轴上 我不知道如何做到这一点 我尝试过使用代码 DateTime Frm
  • [97,98].map(String.fromCharCode) 的奇怪输出

    这按预期工作 97 98 map function x String fromCharCode x a b 但以下行的输出是意外的 97 98 map String fromCharCode a u0000 u0000 b u0001 u0
  • TFS 2010 API DLL Microsoft.TeamFoundation.Framework.Server.dll 在哪里?

    需要这个DLL来引用相应的命名空间Microsoft TeamFoundation Framework Server 此 DLL 似乎不包含在 Visual Studio 2010 Team Explorer 或 Visual Studio
  • 具有多对多关联的模型的计数器缓存

    我有一个Post and a Tag模型与一个many to many协会 post rb class Post lt ActiveRecord Base attr accessible title content tag names ha
  • NumPy 中 MATLAB 的repmat 的等价物是什么

    我想使用 NumPy 执行与以下 MATLAB 代码等效的内容 repmat 1 1 1 1 1 我将如何实现这个目标 这是一个更好的 官方 面向 Matlab 用户的 NumPy链接 恐怕 mathesaurus 已经过时了 numpy
  • 将密码存储在 cookie 中安全吗?

    我的网络应用程序的主页有一个记住账号复选框 如果用户检查它 我会将电子邮件 ID 和密码存储在 cookie 中 这是我的代码 if this ChkRememberme null this ChkRememberme Checked tr
  • 如何在 C# 应用程序中通过 EF 生成存储过程作为异步方法?

    我有一堆 SP 用于从我的 C 控制台应用程序进行调用 因此 我使用 EF 数据库优先 方法 这对我来说相当方便 因为 EF 自己生成 SP 调用代码 我不介意编写像 EXEC sp 这样的 sql 代码 包装我的参数等 唯一的问题是下一个
  • 如何查找 ionic zip 文件的未压缩大小

    我有一个使用压缩的 zip 文件离子拉链 在提取之前 我需要验证可用的磁盘空间 但是我如何预先找到未压缩的大小呢 zip 文件 由 ionic 提供 中是否有任何标头信息以便我可以阅读 这应该可以解决问题 Option 1 static l
  • 在像 Instagram 这样的表格视图中使用多个 AVPlayer

    我正在尝试在 tableview 单元格的每一行中实现 AVPlayer 但我没有找到任何好的文档 我想要一个像 Instagram 一样的时间线 但我不知道如何处理内部的多个玩家和点击手势 知道在哪里可以找到一些吗 我建议不要让所有单元格
  • 从 Spring 应用程序中删除 JSESSIONID cookie

    我有一个无状态的 Spring 应用程序 所以我没有使用会话 我想禁用与会话有关的所有内容 我有一个 context xml Tomcat 配置 我在其中添加了以下内容
  • 如何注释自定义类型 __iter__ 以正确指示非统一返回类型?

    我有一个自定义类型 我想启用它的值解包 元组解包等 我知道在 Python 中执行此操作的最简单方法是实现 iter 这在运行时效果很好 但我想提供类型注释 以便为每个项目返回正确的类型 例如 import typing as t from
  • 在 Apache Spark 中,RandomForestClassifier 的输入带有无效标签列错误

    我正在尝试使用 SCALA 中的随机森林分类器模型使用 5 倍交叉验证来找到准确性 但我在运行时收到以下错误 java lang IllegalArgumentException RandomForestClassifier 的输入带有无效