我正在尝试使用 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/