fminsearch中匿名函数的多个输出

时间:2012-09-25 11:02:39

标签: matlab anonymous-function

我正在尝试从fminsearch优化返回结果。 我正在使用fminsearch来查找SVM的最佳超参数(变量z)。匿名函数最小化分类错误('Crit')但我也希望返回在同一次迭代('Features')获得的另一个变量(给定超参数的选定特征):

fun = @(z)SVM_min_fn(Data,Labels,exp(z(1)),exp(z(2)),num_folds);
[z_opt,Crit] = fminsearch(fun,z0,opts);

function [Crit Features] = SVM_min_fn(Data,Labels,rbf_sigma,boxconstraint,num_folds)
direction = 'forward';
opts = statset('display','iter');
kernel = 'rbf';

disp(sprintf('RBF sigma: %1.4f. Boxconstraint: %1.4f',rbf_sigma,boxconstraint))
c = cvpartition(Labels,'k',num_folds);
opts = statset('display','iter','TolFun',1e-3);
fun = @(x_train,y_train,x_test,y_test)SVM_class_fun(x_train,y_train,x_test,y_test,kernel,rbf_sigma,boxconstraint);
[fs,history] = sequentialfs(fun,Data,Labels,'cv',c,'direction',direction,'options',opts);

Features = find(fs==1);        % Features selected for given sigma and C
[Crit,h] = min(history.Crit);  % Mean classification error

有没有办法让'fminsearch'同时返回'Crit'和Features? 保存到工作区不起作用,因为'fminsearch'返回的超参数的功能不正确

1 个答案:

答案 0 :(得分:3)

如果在fminsearch完成后再进行一次功能评估,那么这是最简单的:

fun = @(z)SVM_min_fn(Data,Labels,exp(z(1)),exp(z(2)),num_folds);
[z_opt,Crit] = fminsearch(fun,z0,opts);

[~, Features_opt] = fun(z_opt);