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

MJe*_*emy 5 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)
Run Code Online (Sandbox Code Playgroud)

原来是错误:

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

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

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

我也尝试用label列索引替换,仍然出错。

有人可以帮忙吗?提前致谢。

Myk*_*vyi 6

我认为,你通过的方式有问题feature_name。构造函数需要一个列表,然后 oyu 传递它pandas.core.indexes.base.Index。问题在于,在feature_name != 'auto'错误提到的 if 语句中,在这样的对象条件上是按元素进行的。因此or尝试加入 aboolnumpy.ndarray

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