我运行的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
替换为列索引,仍然出错。
有人可以帮忙吗?预先感谢。
答案 0 :(得分:4)
我认为,通过feature_name
的方式存在问题。构造函数需要一个列表,然后oyu将其传递给pandas.core.indexes.base.Index
。问题是,在错误提及的if语句的此类对象feature_name != 'auto'
条件上,行为是逐元素进行的。因此,or
尝试加入bool
和numpy.ndarray
。
一种简单的解决方案是转换为列表(feature_name=X_train.columns.tolist()
)或使用feature_name='auto'
,这将从内部的pd.DataFrame
中提取名称
答案 1 :(得分:0)
我还发现下拉NotifyCollectionChangedAction.Replace
有用。
feature_name