feature_names 必须是唯一的 - Xgboost

Posted

技术标签:

【中文标题】feature_names 必须是唯一的 - Xgboost【英文标题】:feature_names must be unique - Xgboost 【发布时间】:2017-09-20 14:37:06 【问题描述】:

我正在为一个非常稀疏的矩阵运行 xgboost 模型。

我收到此错误。 ValueError: feature_names 必须是唯一的

我该如何处理?

这是我的代码。

  yprob = bst.predict(xgb.DMatrix(test_df))[:,1]

【问题讨论】:

【参考方案1】:

根据xgboost source code documentation,这个错误只发生在one place——在DMatrix内部函数中。以下是源代码摘录:

if len(feature_names) != len(set(feature_names)):
    raise ValueError('feature_names must be unique')

所以,这里的错误文本是非常直接的;你的test_df 至少有一个重复的特征/列名。

您已在此帖子上标记了pandas;这表明test_df 是熊猫DataFrame。在这种情况下,DMatrixliterally runs df.columns 提取 feature_names。检查您的test_df 是否有重复的列名,删除或重命名它们,然后再次尝试DMatrix()

【讨论】:

【参考方案2】:

假设问题确实是列重复,以下行应该可以解决您的问题:

test_df = test_df.loc[:,~test_df.columns.duplicated()]

来源:python pandas remove duplicate columns

这一行应该确定哪些列是重复的:

duplicate_columns = test_df.columns[test_df.columns.duplicated()]

【讨论】:

【参考方案3】:

解决此问题的一种方法是在准备数据时使用唯一的列名,然后它应该可以解决。

【讨论】:

以上是关于feature_names 必须是唯一的 - Xgboost的主要内容,如果未能解决你的问题,请参考以下文章

多类文本分类期间 xgboost sklearn 中的 feature_names 不匹配

Python Xgboost: ValueError('feature_names may not contain [, ] or <')

XG-760N到底支持BT3吗?

如何生产 XG 提升 / 决策树 / 随机森林模型

当 XG(跨组)事务可以做同样的工作时,为啥要选择实体组事务?

极海MCU APM32F407xExG可兼容替换STM32F407xG,同时在性能方面有所优化