尝试使用MMLSpark的Scala LIME库解释模型时发生异常

时间:2019-08-14 22:54:57

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

我试图解释我的XGboost模型使用MMLSparks Lime程序包进行的预测。这是我第一次使用LIME库,我能够对数据集执行拟合操作,并且当我尝试执行转换操作时,该程序会停止运行,并出现异常,原因是:java.lang.ClassCastException:org。 apache.spark.ml.linalg.SparseVector无法转换为org.apache.spark.ml.linalg.DenseVector“

1 个答案:

答案 0 :(得分:0)

您可能使用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")))

那么您就可以适合您的模型。