如何解决RegressorChain + LGBMRegressor + eval_set
我想将 LGBMRegressor 用于多输出训练。没有 RegressorChain 的常规流程看起来像这样:
model = lgb.LGBMRegressor(n_estimators=10000,**params)
splitter = ShuffleSplit(10,test_size=0.25)
for idx,(train_index,test_index) in enumerate(splitter.split(train_data,labels)):
X_train,X_test = train_data[train_index],train_data[test_index]
y_train,y_test = labels.values[train_index],labels.values[test_index]
model.fit(X_train,y_train[:,0],eval_set=(X_test,y_test[:,0]),eval_metric='rmse',early_stopping_rounds=100,verbose=1000)
output_test.append(model.predict(test_data))
output_train.append(model.predict(train_data))
scores.append(model.best_score_['valid_0']['rmse'])
当我用 RegressorChain 包裹它时...
我可以使用我自己的数据集拆分函数:
model = RegressorChain(lgb.LGBMRegressor(n_estimators=10000,**params),order=[0,1,2])
splitter = ShuffleSplit(10,y_train,y_test),verbose=1000)
output_test.append(model.predict(test_data))
output_train.append(model.predict(train_data))
scores.append(model.best_score_['valid_0']['rmsle'])
但它不会更新评估数据集并引发错误。
当我使用内置的 CV 参数时:
model = RegressorChain(lgb.LGBMRegressor(n_estimators=10000,cv=10,2])
model.fit(train_data,labels)
output_test = model.predict(test_data)
我必须删除使 eval_set
、early_stopping_rounds
、eval_metric
、verbose
无法使用的 model.best_score_
。
还有其他开箱即用的方法吗?
到目前为止,我看到了手动实现链式多输出学习的唯一解决方案。
sklearn.版本 = 0.24.2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。