线性回归 scala.MatchError:

Posted

技术标签:

【中文标题】线性回归 scala.MatchError:【英文标题】:LinearRegression scala.MatchError: 【发布时间】:2016-06-21 22:03:38 【问题描述】:

在 Spark 1.6.1 和 2.0 中使用 ParamGridBuilder 时出现 scala.MatchError

val paramGrid = new ParamGridBuilder()
  .addGrid(lr.regParam, Array(0.1, 0.01))
  .addGrid(lr.fitIntercept)
  .addGrid(lr.elasticNetParam, Array(0.0, 0.5, 1.0))
  .build()

错误是

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 57.0 failed 1 times, most recent failure: Lost task 0.0 in stage 57.0 (TID 257, localhost): 
scala.MatchError: [280000,1.0,[2400.0,9373.0,3.0,1.0,1.0,0.0,0.0,0.0]] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)

Full code

问题是在这种情况下我应该如何使用 ParamGridBuilder

【问题讨论】:

【参考方案1】:

这里的问题是输入模式不是ParamGridBuilder。价格列作为整数加载,而 LinearRegression 期望双倍。您可以通过将列显式转换为所需类型来修复它:

val houses = sqlContext.read.format("com.databricks.spark.csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(...)
  .withColumn("price", $"price".cast("double"))

【讨论】:

谢谢,在原始示例中错过了这一点,因为没有评论为什么他们要加倍 不客气。它应该基于模式进行验证,而不是在工作中间抛出异常。不幸的是,ML 充满了这样的故障。 似乎工作databricks-prod-cloudfront.cloud.databricks.com/public/… @oluies:你怎么发现这个问题与数据类型有关?我遇到了类似的错误,但我无法找出根本原因。这里是 org.apache.spark.SparkException: Job aborted due to stage failure: Task 3 in stage 1712.): scala.MatchError: [null,1.0,(703,[107,347,350,359,389,397,400,402,403,455,688,696,697,698,699,700,701,7 ,1,1.0,0.09963768115942029,0.2399878640776699,0.3333333333333334])] (classorg.apache.spark.sql.catalyst.expressions.GenericRowWithSchema) 我正在使用 pyspark

以上是关于线性回归 scala.MatchError:的主要内容,如果未能解决你的问题,请参考以下文章

回归-线性回归算法(房价预测项目)

回归-线性回归算法(房价预测项目)

100 个离散值的多类分类的线性回归

PyTorch学习笔记 8. 实现线性回归模型

使用 Tensorflow 的线性回归预制估计器得到错误的答案

处理多元线性回归Python中的分类和数值变量