7

我正在运行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列索引替换,仍然错误。

任何人都可以帮忙吗?提前致谢。

4

2 回答 2

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

于 2018-06-22T08:59:31.077 回答
0

我也发现 dropfeature_name有效。

train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=cat_features)
test_data = lgb.Dataset(X_test, label=y_test, 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)
于 2018-06-25T02:10:10.840 回答