クロスバリデーションを実行して、SVRのRBFカーネル(サポートベクター回帰)の最良のパラメータガンマとCを選択します。私はLIBSVMを使用しています。私は3Dメッシュの4つのグループを含むデータベースを持っています。 私の質問は: 私が使用しているこのアプローチは、4倍のクロスバリデーションでOKですか?私は、RBF KernalのパラメータCとGammaを選択するために、予測値とgroud_truth_valuesの間の誤差を最小限に抑えなければならないと思います。SVM回帰のクロスバリデーション
私はまた別の問題を抱えている、私はクロスバリデーション(二乗相関係数=ナン(回帰))しながら、このNAN値を取得
ここで私が書いたコードです:
[C,gamma] = meshgrid(-5:2:15, -15:2:3); %range of values for C and
%gamma
%# grid search, and cross-validation
for m=1:numel(C)
for k=1:4
fid1 = fopen(sprintf('list_learning_%d.txt',k), 'rt');
i=1;
while feof(fid1) == 0
tline = fgetl(fid1);
v= load(tline);
v=normalize(v);
matrix_feature_tmp(i,:)=v;
i=i+1;
end
fclose(fid1);
% I fill matrix_feature_train of size m by n via matrix_feature_tmp
%%construction of the test matrix
fid2 = fopen(sprintf('liste_features_test%d.txt',k), 'rt');
i=1;
while feof(fid2) == 0
tline = fgetl(fid2);
v= load(tline);
v=normalize(v);
matrice_feature_test_tmp(i,:)=v;
i=i+1;
end
fclose(fid2);
%I fill matrix_feature_test of size m by k via matrix_feature_test_tmp
mos_learning=load(sprintf('mos_learning_%d.txt',k));
mos_wanted=load(sprintf('mos_test%d.txt',k));
model = svmtrain(mos_learning, matrix_feature_train',sprintf('-
s %f -t %f -c %f -g %f -p %f ',3,2 ,2^C(m),2^gamma(m),1));
[y_hat, Acc, projection] = svmpredict(mos_wanted,
matrix_feature_test', model);
MSE_Test = mean((y_hat-mos_wanted).^2);
vecc_error(k)=MSE_Test;
end
mean_vec_error_fold(m)=mean(vecc_error);
end
%select the best gamma and C
[~,idx]=min(mean_vec_error_fold);
best_C = 2^C(idx);
best_gamma = 2^gamma(idx);
%training with best parameters
%for example
model = svmtrain(mos_learning1, matrice_feature_train1',sprintf('-s
%f -t %f -c %f -g %f -p %f ',3,2 ,best_C, best_gamma,1));
[y_hat_final, Acc, projection] = svmpredict(mos_test1,matrice_feature_test1',
model);
こんにちは1)SVMTRAINの呼び出しで、構造モデルではなく、平均平方誤差が返されることを指定しました(オプション-Vを指定してSVTMTRAINを呼び出すことに注意してください)。ですから、ベクトルcv_accには各ペア(C、ガンマ)に関連するエラーが含まれているので、min(cv_acc)の使用は正しいと思います。 2)折り畳みを変更するためにネストループを使用する必要があります。私は編集します。 3)後で最良のパラメータを選択するために交差検証のエラーを最小限に抑えなければならないと思いましたか? – Anass
@Anassそれはまだ間違っているトレーニングエラーの場合は、どのパラメータセットがあなたに最高のトレーニングエラーを与えるか気にしない、あなたはクロス検証エラーが気になります。したがって、3回折り畳んで訓練し、SVMモデルを返し、そのモデルを使用して4倍に予測し、MSEを計算し、4回行い、エラーを集計し、その集計はそのパラメータセットの*クロスバリデーション*エラーです。次に、テストするすべてのパラメータの組み合わせに対して繰り返し、各パラメータの組み合わせの相互検証エラーの最小値のみを考慮します。 – Dan
okありがとうございます。私はこれを試し、私の投稿を編集して結果を表示します – Anass