sklearn:提前停止使用eval_set?

时间:2019-01-22 00:07:35

标签: python scikit-learn

我使用的是xgboost,它提供的early_stopping功能非常好。

但是,当我查看sklearn fit函数时,仅看到Xtrain, ytrain个参数,而没有看到用于Early_stopping的参数。

是否可以将评估集传递给sklearn以便提前停止?

谢谢

2 个答案:

答案 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提及验证分数。