1

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」によって返されるハイパーパラメーターの正しい機能ではないため、ワークスペースへの保存は機能しません

4

1 に答える 1

3

fminsearch完了後にもう 1 つの関数評価を行うのが最も簡単です。

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);
于 2012-09-25T11:22:01.550 に答える