LightGBM: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
LightGBM: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我 运行 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)
结果是错误:
if self.handle is not None and feature_name is not None and
feature_name != 'auto':
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()
我检查了 Whosebug 上的其他类似错误,主要与 numpy
相关,然后我检查了文档并尝试用 [0, 2, 5, ...]
之类的索引替换我的 categorical_feature
(我原来的是专栏分类特征的名称),仍然是同样的错误。
我也试过用列索引替换label
,还是报错。
有人能帮忙吗?提前致谢。
我认为,您通过 feature_name
的方式有问题。构造函数需要一个列表,然后将其传递 pandas.core.indexes.base.Index
。问题是在这样的对象 feature_name != 'auto'
条件下,错误提到的 if 语句中的行为是按元素进行的。因此 or
尝试加入 bool
和 numpy.ndarray
.
一个简单的解决方案是转换为列表 (feature_name=X_train.columns.tolist()
) 或使用 feature_name='auto'
,这将从内部 pd.DataFrame
中提取名称
我也发现 drop feature_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)
我 运行 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)
结果是错误:
if self.handle is not None and feature_name is not None and feature_name != 'auto':
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我检查了 Whosebug 上的其他类似错误,主要与 numpy
相关,然后我检查了文档并尝试用 [0, 2, 5, ...]
之类的索引替换我的 categorical_feature
(我原来的是专栏分类特征的名称),仍然是同样的错误。
我也试过用列索引替换label
,还是报错。
有人能帮忙吗?提前致谢。
我认为,您通过 feature_name
的方式有问题。构造函数需要一个列表,然后将其传递 pandas.core.indexes.base.Index
。问题是在这样的对象 feature_name != 'auto'
条件下,错误提到的 if 语句中的行为是按元素进行的。因此 or
尝试加入 bool
和 numpy.ndarray
.
一个简单的解决方案是转换为列表 (feature_name=X_train.columns.tolist()
) 或使用 feature_name='auto'
,这将从内部 pd.DataFrame
中提取名称
我也发现 drop feature_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)