我正在尝试使用 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/