【问题标题】:XGBoost feature_importances_ parameters gives a 0 valued vectorXGBoost feature_importances_parameters给出一个0值向量
【发布时间】:2018-08-15 09:18:10
【问题描述】:

我已经用大型数据集 [400000,93] 对 XGBClassifier 进行了实验, 数据包含很多 NaN 值,我使用了 sklearn 包中的插补

imputer = Imputer()
imputed_x = imputer.fit_transform(data)
data = imputed_x

但特征重要值看起来像

    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

由于这个原因,结果-

precision: 1.0

recall: 1.0

accuracy: 1.0

traning_accuracy: 1.0

为什么模型不能拟合数据。

示例代码片段

model_xboost =XGBClassifier(max_depth=5,
                         n_estimators=100,)

#train
model_xboost.fit(train_data,train_labels)
print(model_xboost.feature_importances_)

【问题讨论】:

  • 您可以看到您的其中一项功能决定了您的模型的整个决策过程。因此,整个 feature_importance 列表中只有一个特征的值为 1,其余为 0。尝试删除此特征并查看模型的行为。似乎此特定功能过度适合您的模型
  • 非常感谢@Flika205...
  • 我很想知道它是否真的解决了您的问题,以及您的模型在删除此功能后的表现如何
  • 也许该特征是您不小心放入 X 中的类标签,或者可能是与类相对应的东西,实际上是在已知类之后计算的。你不应该使用这些功能。
  • @Flika205 ,去除高相关特征后,模型给出了一个特征列表及其重要性

标签: python pandas machine-learning statistics


【解决方案1】:

您有一个完全相关的特征:值 1.0。这意味着你已经用目标训练了你的模型。您必须在训练中将其移除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多