【发布时间】:2017-09-20 14:37:06
【问题描述】:
我正在为一个非常稀疏的矩阵运行 xgboost 模型。
我收到此错误。 ValueError: feature_names 必须是唯一的
我该如何处理?
这是我的代码。
yprob = bst.predict(xgb.DMatrix(test_df))[:,1]
【问题讨论】:
标签: python pandas xgboost sklearn-pandas
我正在为一个非常稀疏的矩阵运行 xgboost 模型。
我收到此错误。 ValueError: feature_names 必须是唯一的
我该如何处理?
这是我的代码。
yprob = bst.predict(xgb.DMatrix(test_df))[:,1]
【问题讨论】:
标签: python pandas xgboost sklearn-pandas
根据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()。
【讨论】:
假设问题确实是列重复,以下行应该可以解决您的问题:
test_df = test_df.loc[:,~test_df.columns.duplicated()]
来源:python pandas remove duplicate columns
这一行应该确定哪些列是重复的:
duplicate_columns = test_df.columns[test_df.columns.duplicated()]
【讨论】:
解决此问题的一种方法是在准备数据时使用唯一的列名,然后它应该可以解决。
【讨论】: