GridSearchCV 与 RandomSearchCV
有人可以解释 GridSearchCV 和 RandomSearchCV 之间的详细区别吗?以及算法如何在幕后工作?
根据我对文档的理解:
这使用一组随机的超参数。当有很多超参数时很有用,因此搜索空间很大。如果您事先相信超参数应该是什么,则可以使用它。
在搜索空间上创建一个网格,并针对空间中所有可能的超参数评估模型。很好,因为它简单而详尽。不利的一面是,如果搜索空间很大(例如非常多的超参数),计算时间可能会非常昂贵。
有人可以解释 GridSearchCV 和 RandomSearchCV 之间的详细区别吗?以及算法如何在幕后工作?
根据我对文档的理解:
这使用一组随机的超参数。当有很多超参数时很有用,因此搜索空间很大。如果您事先相信超参数应该是什么,则可以使用它。
在搜索空间上创建一个网格,并针对空间中所有可能的超参数评估模型。很好,因为它简单而详尽。不利的一面是,如果搜索空间很大(例如非常多的超参数),计算时间可能会非常昂贵。
想象以下场景:
params = {
epoch = [20, 30, 40, 50], #those numbers are only for example
dense_layer_size = [20, 30],
second_danse_layer = [30, 40]
}
在 GridSearch 中,您尝试所有参数组合,在这种情况下:
(4 * 2 * 2) = 16 #Total of parameters
在文档中的 RandomSearch 中:
并非所有的参数值都经过试验,而是从指定的分布中抽取固定数量的参数设置。尝试的参数设置数量由 n_iter 给出。
在这种情况下,他选择“n_iter”个组合然后尝试。有利于优化较少的参数,但是,如果您不确定多个参数,可能会放弃一些更好的组合。
另一个好方法是使用遗传算法来优化您的网络。
遗传算法生成一些“个体”(参数的组合)的组合,并在每一步中选择最佳个体(称为父母)并进行交叉,然后从父母双方中生成更多具有特征的个体。这样,在某些情况下,当您不确定哪个参数会增加您的结果时,您可以优化您的网络并添加随机元素。
如果您想要一个易于集成的遗传算法,您可以查看这个项目。
让我们从 GridSearch 开始: GridSearchCV 获取一个参数字典,例如:
param = {'gamma': [0.1,0.001,0.0001], 'C': [1,10,100,1000]}
并运行 n 个模型,其中 n 是所有参数组合的计数。
所有组合的组合通常被称为参数空间。使用 GridSearchCV 可能需要大量计算,因为它必须为每个组合训练模型,通常包括交叉验证。因此,对于每种组合,它将在 k 折上进行训练。这通常会极大地增加您的计算时间。然而,好处是,如果您在广泛的参数空间上运行它,您将获得可能的“最佳”参数设置。
RandomSearchCV 现在获取您的参数空间并随机选择预定义的次数并多次运行模型。您甚至可以为他提供参数的连续分布,以便从中随机选择值。这样,您就有了一种对随机参数设置进行试验的计算优化方式。如果您已经大致了解要调整哪些超参数但还不确定要使用哪些值,这将很有用。