Python 继续随机搜索CV拟合

Python 继续随机搜索CV拟合,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,为了调整一些机器学习甚至管道的超参数,sklearn提出了穷举GridsearchCV和随机化。后者对提供的分布进行采样并进行测试,最终选择最佳模型并提供每个试验的结果 但假设我用这种随机方法训练了1000个模型。后来,我觉得这不够精确,想再试试1000多种型号。我可以恢复训练吗?Aka,要求在不损失当前进度的情况下进行更多的采样和尝试更多的模型。再次调用fit将重新启动并丢弃以前的超参数组合 我的情况如下: pipeline_cv=RandomizedSearchCVpipeline,分布,n

为了调整一些机器学习甚至管道的超参数,sklearn提出了穷举GridsearchCV和随机化。后者对提供的分布进行采样并进行测试,最终选择最佳模型并提供每个试验的结果

但假设我用这种随机方法训练了1000个模型。后来,我觉得这不够精确,想再试试1000多种型号。我可以恢复训练吗?Aka,要求在不损失当前进度的情况下进行更多的采样和尝试更多的模型。再次调用fit将重新启动并丢弃以前的超参数组合

我的情况如下:

pipeline_cv=RandomizedSearchCVpipeline,分布,n_iter=1000,n_jobs=-1 管道/U cv=管道/U cv.fittrainX,列车 预测=管道_cv.predicttargetX 然后,稍后,我会决定1000次迭代不足以覆盖我的发行版空间,所以我会这样做

pipeline\u cv=pipeline\u cv.resumetrainX,trainy,n\u iter=1000不存在? 然后我会让一个模型在2000个超参数组合中训练

我的目标可以实现吗?

从2017年9月起,我的目标就有了,但它仍然是开放的:

在实践中,搜索某些参数空间,然后继续搜索某些相关空间是很有用的。我们可以提供一个warm_start参数,以便在不重新评估已经测试过的参数组合的情况下,将更多候选人的结果累积到cv_results中

而类似的问题也没有得到有效的回答

因此,答案似乎是否定的,因为scikit学习社区认为没有必要包含这种可能性

但是让我们停下来想一想这样的东西是否真的有价值

RandomizedSearchCV基本上通过从给定分布中随机采样参数值来工作;e、 例如,使用以下示例:

一般来说,根据这种随机抽样和随机数生成RNG的基本原理,不能保证这种随机抽样值不会被随机抽样超过一次,特别是在迭代次数较大的情况下。考虑到RandomizedSearchCV本身也不做任何簿记,因此原则上,如果迭代次数足够大,相同的参数组合在任何一次运行中可能会尝试多次

即使在连续分布的情况下,如上文使用的均匀分布,获得已取样的准确值的概率可能非常小,也有两个样本的常规情况,如0.678918和0.678919,无论多么接近,它们仍然不同,并算作不同的试验

鉴于上述情况,我看不出启动RandomizedSearchCV会有多大的实际用途。随机化SRACCHCV的实际价值在于采样一个通常大面积的参数值的可能性——如此大以至于我们认为有用的是释放简单随机抽样的能力,这让我重复一下,它本身不记得返回的过去的样本,而且它很可能返回与过去返回的样本完全或近似相等的样本,从而使任何热启动实际上都无关紧要


因此,只要按顺序运行两个或多个RandomizedSearchCV进程并存储其结果,就可以有效地完成这项工作,前提是我们在不同的运行中不使用相同的随机种子,即上面提到的线程中有效地建议了什么。

我明白了。我希望有一个更紧凑的解决方案,但我想按照您所说的顺序运行它们可能是我们现在能做的最接近的了。我仍然认为热启动或合并实例会提供价值,但如果sklearn的社区还没有决定,那就太糟糕了。谢谢你的回答!
distributions = dict(C=uniform(loc=0, scale=4),
                     penalty=['l2', 'l1'])