LightGBM:ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

时间:2018-06-22 06:54:18

标签: python lightgbm

我运行的lightgbm具有以下分类功能:

X_train, X_test, y_train, y_test = train_test_split(train_X, train_y, test_size=0.3)

train_data = lgb.Dataset(X_train, label=y_train, feature_name=X_train.columns, 
                                  categorical_feature=cat_features)

test_data = lgb.Dataset(X_test, label=y_train, reference=train_data)

param = {'num_trees': 4000, 'objective':'binary', 'metric': 'auc'}
bst = lgb.train(param, train_data, valid_sets=[test_data], early_stopping_rounds=100)

找出错误:

  

如果self.handle不为None并且feature_name不为None并且   feature_name!='auto':

     

ValueError:具有多个元素的数组的真值是   暧昧。使用a.any()或a.all()

我检查了stackoverflow上的其他类似错误,这些错误主要与numpy有关,然后我检查了文档并尝试将categorical_feature替换为[0, 2, 5, ...]之类的索引(我的原始列名是类别特征),仍然是相同的错误。

我还尝试将label替换为列索引,仍然出错。

有人可以帮忙吗?预先感谢。

2 个答案:

答案 0 :(得分:4)

我认为,通过feature_name的方式存在问题。构造函数需要一个列表,然后oyu将其传递给pandas.core.indexes.base.Index。问题是,在错误提及的if语句的此类对象feature_name != 'auto'条件上,行为是逐元素进行的。因此,or尝试加入boolnumpy.ndarray

一种简单的解决方案是转换为列表(feature_name=X_train.columns.tolist())或使用feature_name='auto',这将从内部的pd.DataFrame中提取名称

答案 1 :(得分:0)

我还发现下拉NotifyCollectionChangedAction.Replace有用。

feature_name