2012-09-25 73 views
1

我試圖從fminsearch優化中返回結果。 我正在使用fminsearch爲SVM查找最佳超參數(變量z)。匿名函數被最小化分類錯誤(「暴」),但我也想回到同一迭代獲得另一個變量(對於給定的超參數選擇的要素)(「功能」):來自fminsearch的匿名函數的多個輸出

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」返回的超參數不起作用

回答

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); 
+0

謝謝,看來,上班 – BGreene