我使用这段代码对catboost.However进行交叉验证,它已经运行了10个小时,控制台仍然在输出,交叉验证显然超过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次之后它还没有停止。
为什么是这样?
发布于 2020-12-15 08:51:18
要解决这个问题,有几个简单的步骤:
iterations减少到更有意义的1,000,甚至300,如果你还有时间问题的话,cv减少到3,例如,如果数据在合理的时间内完成,用较小的数据子集进行注意,RFECV是一个贪婪的algo,一次修剪一个最弱的特性,这可能会导致一个问题,如果达到一个局部的最小值。
https://stackoverflow.com/questions/65299885
复制相似问题