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
。在这种情况下,DMatrix
literally 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 <')