scala - 如何使用 spark 在 scala 中获取 XGBoost 的特征重要性?

标签 scala xgboost

我正在尝试使用 Spark 2.1.1 在 Scala 2.11 中获取 XGBoost 模型的特征重要性。到目前为止我的代码如下

(...)

def get_param(): mutable.HashMap[String, Any] = {

    val params = new mutable.HashMap[String, Any]()
    params += "eta"             -> Configuration.eta
    params += "max_depth"       -> Configuration.maxDepth
    params += "gamma"           -> Configuration.gamma
    params += "objective"       -> Configuration.objective
    params += "alpha"           -> Configuration.alpha
    params += "lambda"          -> Configuration.lambda
    params += "subSample"       -> Configuration.subSample
    params += "minChildWeight"  -> Configuration.minChildWeight

    return params
  }

val model = XGBoost.trainWithDataFrame(trainingDataCached, 
                                       get_param().toMap, 
                                       Configuration.numberOfRounds, 
                                       nWorkers = Configuration.numberOfWorkers, 
                                       useExternalMemory = useExternalMemory )

我现在缺少哪些步骤?

最佳答案

试试这个:

val featureScoreMap = xgbModel.booster.getFeatureScore()
val sortedScoreMap = featureScoreMap.toSeq.sortBy(-_._2) // descending order

getFeatureScore 方法将返回特征重要性图(类型:Map[String, Integer]),其中键为特征索引(例如:f0, f1, f2 ...)(特征索引与特征相同用于训练模型的训练数据集中的顺序),整数是特征得分(通过在训练模型中累积该特征的信息增益来计算)。

如果您真正想要的是特征真实名称与特征重要性得分的配对,那么您应该为特征索引图提供特征名称。

关于scala - 如何使用 spark 在 scala 中获取 XGBoost 的特征重要性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835979/

相关文章:

regex - scala 正则表达式组匹配和替换

scala - 仅交叉构建多项目 sbt 构建的一部分

scala - 如何在 Scala 中将命令式双 for 循环转换为函数式风格而不返回?

python - 将 XGBoost 模型转换为 CoreML

CMake v3.4.1 在 Ubuntu 16.04 上找到 CUDA 7.5 而不是 CUDA 8.0

scala - 如何在scala中对相邻元素求和

java - 将 Scala 选项转换为 Java 可选

r - 将 xgboost TreeMap 导出到 R 中的图像

r - 如何限制执行时间但将输出保存在R中?

r - XGboost 模型始终获得 100% 的准确率?