能否为随机搜索交叉验证(RandomSearchCV)设置一个时间限制?我知道可以调整迭代次数,但我特别想在控制迭代次数之外,还能控制最大搜索时间。
这样做的原因是我在使用一个包含不同预处理步骤的搜索网格,对于每一种预处理组合,我都会调用一个带有cv=4和iterations=30的RandomSearchCV。大多数组合都没有问题(训练时间非常短<20秒),但有些组合似乎会永远运行下去,我不知道为什么。
我花了几个小时寻找导致无限训练时间的问题所在,但最终放弃了,所以我只想跳过训练时间超过10分钟的情况。
如果需要,我可以展示代码,但我想在这里可能没什么帮助。
回答:
我不确定您使用的是哪个模块,也不知道是否有实现的功能可以满足您的需求,但您可以“手动”在代码中检查经过的时间:
import timedef somefunc(time_started): a = true time_limit = 5000 while a: # 做一些事情/运行一个迭代 if round(time.monotonic() * 1000) - time_started > time_limit: # 检查自调用函数以来经过的时间/毫秒 a = false # 将在下一次“while-迭代”中中断 t0= round(time.monotonic() * 1000)func(t0)
显然,您可以根据需要将time_limit更改为任何其他数值。