在 Scikit learn 中构建管道时是否需要考虑适当的参数序列?

数据挖掘 Python scikit-学习
2022-02-13 10:15:59

免责声明: 我知道这可能被认为是一种主观类型的问题,但我希望它足够具体,不会被标记。请给它一个机会。

我正在 scikit-learn 中对 50 本书的语料库进行 GridSearch(所有商业出版的平均文本......每篇约 200 页文本)。

当我开始使用 GridSearch 时,我开始思考。建立管道肯定必须有某种“最佳实践”吗?

当然,我可以包含和删除参数,但我实际上只是在黑暗中四处寻找最好的分数。

可能,首先使用更大、更有效的参数创建一个更小的探索性管道可能是有意义的。在运行这个基本管道之后,接下来可以运行更多影响较小(通常)的参数。

例如,假设我正在 GridSearching 一个 TfidfTransformer。我假设use_idf打开或关闭开关会对得分产生真正的影响,而指定alpha=0.000010vsalpha=0.000015可能不会。

一般来说,在使用管道时,是否有替代“扔进厨房水槽”的替代方法,可以带来更认知、信息丰富(并且可能更快)的体验?

2个回答

您要求的是基于梯度的超参数优化。要启用这样的网格搜索,必须在当前管道的所有超参数组合的空间上定义一个度量。

use_idf由于标志的二进制性质,我认为这在您的示例中没有意义。假设您的参数组合是(use_idf, alpha). 然后你必须决定和之间的距离(True, 0.00015)是多少(True, 0.00010)在您的情况下,它应该小于 和 之间的(True, 0.00015)距离(False, 0.00015)所以

d((True, 0.00015), (True, 0.00010)) < d((True, 0.00015), (False, 0.00015))

但是 和 之间的距离(True, 0.00015)(True, 0.05)还会比 小d((True, 0.00015), (False, 0.00015))吗?我认为你说对了。

通过选择指标,您将主观地影响对最佳超参数的搜索。正如以下论文中所建议的那样,随机搜索可能更合适

@article{bergstra2012random,
  title={Random search for hyper-parameter optimization},
  author={Bergstra, James and Bengio, Yoshua},
  journal={The Journal of Machine Learning Research},
  volume={13},
  number={1},
  pages={281--305},
  year={2012},
  publisher={JMLR. org}
}

auto-sklearn团队正在努力寻找一种完全自动化管道的方法。到目前为止,它为我带来了很好的结果。比我使用 GridsearchCV 手动获得的效果更好。如果您乐于使用此类工具或阅读其源代码,这可以回答您的问题。

ML4AAD,您可以找到解决此问题的尝试的更多链接。