首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用spark在scala中获取XGBoost的特性重要性?

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

Stack Overflow用户
提问于 2017-10-20 01:49:15
回答 2查看 3K关注 0票数 3

我正在尝试使用Spark2.1.1在Scala2.11中获得XGBoost模型的特性重要性。到目前为止,我的代码如下

代码语言:javascript
复制
(...)

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 )

我现在遗漏了哪些步骤?

EN

回答 2

Stack Overflow用户

发布于 2018-12-11 19:45:03

试试这个:

代码语言:javascript
复制
val featureScoreMap = xgbModel.booster.getFeatureScore()
val sortedScoreMap = featureScoreMap.toSeq.sortBy(-_._2) // descending order

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-05-14 07:56:01

上面的答案说,xgbModel.booster.getFeatureScore()通过累积信息增益来计算特征分数。这是不正确的。它实际上是通过累积每个特定特征的树分裂数来计算分数的。

在XGBoost 0.8版本中,获取Spark中信息增益计算的特征重要性的方法如下:

代码语言:javascript
复制
// first empty string argument means using a null feature map.
val featureScoreMap_gain = xgbModel.nativeBooster.getScore("", "gain")
println("feature importance by information gain is :")
println(featureScoreMap_gain)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46835979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档