与 CatBoostRegressor 的交叉验证永远不会停止

Cross-validation with CatBoostRegressor never stop

我用这段代码和catboost.However做Cross-validation,已经10个小时了,控制台还在输出,cross-validation明显多了5轮
有什么问题?

import pandas as pd
from sklearn.model_selection import train_test_split
import catboost
# from sklearn.model_selection import KFold
from sklearn.feature_selection import RFECV

train_data = pd.read_csv('train.txt',sep='\t')
test_data = pd.read_csv('test.txt',sep='\t')
X = train_data.iloc[:,:-1]
y = train_data['target']
model = catboost.CatBoostRegressor(
                           loss_function="RMSE",
                           eval_metric="RMSE",
                           task_type="GPU",
                           learning_rate=0.01,
                           iterations=10000,
                           random_seed=42,
                           od_type="Iter",
                           depth=10,
                           early_stopping_rounds=50
                          )
rfecv = RFECV(estimator = model,cv = 5,scoring = 'neg_mean_squared_error')
rfecv.fit(X, y)
df = pd.DataFrame(rfecv.predict(test_data))
df.to_csv("my.txt", index=False, header=False)

然后我停止程序,当我将迭代次数改为100时,我发现控制台总共迭代了161次并且stopped.In我的意见,它应该在5次交叉验证后停止,但是事实上5次之后还没有停止
为什么会这样?

尝试解决此问题有几个简单的步骤:

  1. iterations 减少到更有意义的 1000,如果您还有时间问题,甚至可以减少 300。
  2. 减少 cv 到 3 例如
  3. 检查您的数据的较小子集是否在合理的时间内完成。然后用整个数据集进行估计——假设算法将“线性”扩展——如果你对时间感到满意的话。

注意,RFECV 是一种贪心算法,一次修剪一个最弱的特征,如果达到局部最小值,这可能会导致问题。