mllib:Exception in thread "main" org.apache.spark.SparkException: Input validation failed.

本文探讨了在使用Spark MLlib进行逻辑回归和线性支持向量机分类时遇到的输入验证错误问题。重点分析了分类标签应该为0或1,而非其他值的限制,并提供了通过修改类别标签解决此问题的方法。此外,文章还强调了线性支持向量机更适合二分类数据的原因,并指出修改算法以支持多类别分类的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们使用mllib做分类,用到逻辑回归或线性支持向量机做分类时,可能会出现下面的错误:

15/04/09 21:27:25 ERROR DataValidators: Classification labels should be 0 or 1. Found 3000000 invalid labels
Exception in thread "main" org.apache.spark.SparkException: Input validation failed.

由于做调试时,debug输出的信息很多,我们常常忽略了上边的ERROR,而特别关注Input validation failed。


寻找源码,先关校验数据代码如下:

// Check the data properties before running the optimizer
    if (validateData && !validators.forall(func => func(input))) {
      throw new SparkException("Input validation failed.")
    }

源码仅此而已,并未能得到解决问题的办法。然后,后来才发现错误信息还有上边儿的error。


错误信息的意思是分类标签应该是0或者1,而不能是其他值。当时我的类别标签中包含了2,正好是3000000条信息;于是将类别标签替换成0或1,编译通过。


这也证明了为什么说线性支持向量机适合做二分类的数据。当然,修改算法它也可以支持三种类别,网上有大量相关实现。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值