我正在使用Matlab的fminsearch方法来最小化功能:

c = cvpartition(200,'KFold',10);
minfn = @(z)kfoldLoss(fitcsvm(cdata,grp,'CVPartition',c,...
    'KernelFunction','rbf','BoxConstraint',exp(z(2)),...
    'KernelScale',exp(z(1))));
opts = optimset('TolX',5e-4,'TolFun',5e-4);
[searchmin fval] = fminsearch(minfn,randn(2,1),opts)


最小化超过两个参数。

现在我想最小化第三个参数,但是此参数只能采用正整数值,即1,2,3,...

如何告诉fminsearch只考虑正整数?

其次,如果我的第三个参数初始化为10,但实际的最佳值为100,那么在这种情况下fminsearch会收敛很快吗?

最佳答案

您不能告诉fminsearch仅考虑整数。它使用的算法不适用于离散优化,而离散优化通常比连续优化困难。

如果整数参数的合理值相对较少,则可以将它们全部循环遍历,但这可能太昂贵了。或者,您可以准备自己的一维离散优化函数,并让它为尝试的整数参数的每个值调用fminsearch。 (例如,您可以模仿一些标准的一维连续优化算法,并在找到一个比两个邻居都更好的参数值后才返回。)您也许可以使此函数适应特定问题您正在尝试解决。

10-06 10:16