scala - 尝试使用 MMLSpark 的 scala LIME 库解释模型时出现异常

标签 scala apache-spark machine-learning artificial-intelligence

我正在尝试使用 scala 的 MMLSparks Lime 包解释我的 XGboost 模型所做的预测。

这是我第一次使用 LIME 库,我能够对数据集执行拟合操作,当我尝试执行转换操作时,程序因异常而停止,

由以下原因引起:java.lang.ClassCastException:org.apache.spark.ml.linalg.SparseVector 无法转换为 org.apache.spark.ml.linalg.DenseVector

我有大约 200 个特征,其中许多特征值为零。

最佳答案

您可能正在使用VectorAssembler创建您的特征向量列。如果特征集中有很多零,变换函数会输出一个稀疏向量,以节省计算空间。这会导致 LIME 错误。

有关 VectorAssembler 输出的更多信息 - Spark ML VectorAssembler returns strange output

解决方案是将列转换回密集向量,以便 mmlspark LIME 进行解释。

import org.apache.spark.sql.functions.udf
import org.apache.spark.ml.linalg.Vector

val asDense = udf((v: Vector) => v.toDense)

featuresDF.withColumn("features", asDense(col("features")))

然后你就可以适合你的模型了。

关于scala - 尝试使用 MMLSpark 的 scala LIME 库解释模型时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503010/

相关文章:

java - 使用 Java 在 Spark 2.0.2 中为 kyro 编码数据集构建决策树管道

python - Hogwild 的 PyTorch 多处理错误

scala - 使用丰富我的库对匿名函数进行类型推断

algorithm - 将前 10% 的未排序 RDD 作为 Spark 中的另一个 RDD 返回的有效方法?

scala - 在 rdd 上运行 Spark 聚合函数,传递 max 作为第一个函数

hadoop - 如何在 spark sql 的配置单元上下文对象中查找登录/连接/当前用户?

algorithm - 验证感知器学习示例

opencv - 将均值偏移应用于检测到的窗口

scala - 使用 Akka 的 Scheduler 调度一个函数每秒运行一次

templates - 如何在Play2中向反向路由添加参数?