我使用的是xgboost
,它提供的early_stopping
功能非常好。
但是,当我查看sklearn
fit
函数时,仅看到Xtrain, ytrain
个参数,而没有看到用于Early_stopping的参数。
是否可以将评估集传递给sklearn以便提前停止?
谢谢
答案 0 :(得分:2)
在sklearn.ensemble.GradientBoosting
中,必须在实例化模型时配置提前停止,而不是在进行fit
时配置。
validation_fraction :浮点型,可选,默认为0.1。 保留训练数据作为早期停止的验证集。必须 介于0和1之间。仅当n_iter_no_change设置为 整数。
n_iter_no_change :整数,默认值无n_iter_no_change用于 决定在以下情况下是否将尽早停止训练 验证分数没有提高。默认情况下将其设置为“无” 禁用提前停止。如果设置为数字,则将其保留 validate_fraction训练数据的大小,作为验证和 当验证分数在所有方面均未提高时,终止培训 以前的n_iter_no_change次迭代次数。
tol :浮动,可选,默认1e-4允许提前停止。 当n_iter_no_change的损失至少没有改善时 迭代(如果设置为数字),训练将停止。
为了设置early_Stopping
,您应该考虑将上述参数传递给模型。
您可能想阅读Early stopping of Gradient Boosting以获得完整的说明和示例。
答案 1 :(得分:-1)
当您使用early_stopping_rounds
为.fit()
调用Xbgoost
时,参数名称为Sklearn API
。
工作示例!
from sklearn.datasets import load_breast_cancer
breast_cancer = load_breast_cancer()
X = breast_cancer.data
y = breast_cancer.target
from xgboost.sklearn import XGBClassifier
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size = 0.2, random_state = 100)
GBM = XGBClassifier()
GBM.fit(X_train, y_train, eval_metric="auc",
eval_set=[(X_test,y_test)], early_stopping_rounds=2)
如果打算使用sklearn.ensemble.GradientBoostingClassifier()
,则必须将tol
设置为0,将n_iter_no_change
设置为等于early_stopping_rounds
的值。
注意:sklearn.ensemble.GradientBoostingClassifier()
不使用单独的验证数据集,您必须提供完整的数据集,然后使用validation_fraction
提及验证分数。