我试图解释我的XGboost模型使用MMLSparks Lime程序包进行的预测。这是我第一次使用LIME库,我能够对数据集执行拟合操作,并且当我尝试执行转换操作时,该程序会停止运行,并出现异常,原因是:java.lang.ClassCastException:org。 apache.spark.ml.linalg.SparseVector无法转换为org.apache.spark.ml.linalg.DenseVector“
答案 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")))
那么您就可以适合您的模型。