我正在尝试将模拟退火(SA)应用于线性回归问题。
例如:我现在有200
个点,我想要拟合一条直线并得到它的k
和b
。
我的问题是:我试图用MATLAB解决这个问题。但我对如何选择下一状态感到困惑。我在程序中尝试了如下方法:
next_k = k + (2*rand-1);next_b = b + (2*rand-1);
我觉得这种方法不是很好,结果中的k
和b
不够准确。我希望找到一种更有效的方法来扰动SA中的当前状态。我认为这样做可以在这个问题中得到更准确的结果。在这个问题中,成本函数实际上与最小二乘法相同。我只是想将SA应用于估计问题。
回答:
在SA中,有时快速且直接的提议方法效果很好,因为它们易于实现。
(?) 效果好吗?
如果它在最后阶段无法收敛,你可能想要尝试一些变体,这些变体选择相似的提议但随机性更小,以优化最后几个微小的步骤。大噪声在开始时效果快,但可能无法使你接近(局部)最优解。
就像在https://pypi.org/project/frigidum/中的基本示例
它使用了两种提议,一种是大随机噪声,另一种是微小的噪声。
其他变体:随机仅调整k
或b
,这样退火过程会更加平滑。