gpt4 book ai didi

java - 将特征重要性 vector 压缩到列名称数组时出现 Scala java.io toArray 错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:01 25 4
gpt4 key购买 nike

当尝试将特征重要性 vector 从 lightGBM getfeatureImportances 压缩到列名称数组时,我遇到了以下错误:

import com.microsoft.ml.spark.LightGBMClassificationModel
import org.apache.spark.ml.classification.RandomForestClassificationModel

def getFeatureImportances(inputContainer: PipelineModelContainer): (String, String) = {
val transformer = inputContainer.pipelineModel.stages.last

val featureImportancesVector = inputContainer.params match {
case RandomForestParameters(numTrees, treeDepth, featureTransformer) =>
transformer.asInstanceOf[RandomForestClassificationModel].featureImportances
case LightGBMParameters(treeDepth, numLeaves, iterations, featureTransformer) =>
transformer.asInstanceOf[LightGBMClassificationModel].getFeatureImportances("split")
}

val colNames = inputContainer.featureColNames
val sortedFeatures = (colNames zip featureImportancesVector.toArray).sortWith(_._2 > _._2).zipWithIndex
}

我在引用代码的最后一行时收到此错误:

value toArray is not a member of java.io.Serializable

似乎光 GBM 特征重要性无法转换为数组。如果只是 randomForestClassifier 功能重要性,则此代码可以正常工作。我还能做什么?

最佳答案

match block 的两个分支中,一returns Array[Double] ,另一个returns Vector .

这两种类型的共同父类(super class)型是java.io.Serialized,因此 Scala 推断出变量 featureImportancesVector 的类型。toArray 在该类型中不可用,尽管该方法在两种情况下都存在。

解决这个问题很简单,正如评论中所建议的,将.toArray移动到featureImportances,这样两个分支的类型以及变量的类型就变为Array[Double]

关于java - 将特征重要性 vector 压缩到列名称数组时出现 Scala java.io toArray 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com