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