1

予測を行うためにしばらくの間、MATLAB LIBSVM に取り組んでいます。75% をトレーニングに使用し、15% を最適なパラメーターを見つけてテストに使用するデータセットがあります。コードを以下に示します。

trainX and trainY are the input and output training instances
testValX and testValY are the validation dataset I use
for j = 1:100
    for jj = 1:10
        model(j,jj) = svmtrain(trainY,trainX,...
        ['-s 3 -t 2 -c ' num2str(j) ' -p 0.001 -g ' num2str(jj) '-v 5']);
        [predicted_label, ~, ~]=svmpredict(testValY,...
        testValX,model(j,jj));
        MSE(j,jj) = sum(((predicted_label-testValY).^2)/2);
    end
end
[min_val,min_indi] = min(MSE(:));
best_predicted_model_rbf(i) = model(min_indi);

ここでの私の質問は、これが正しいかどうかです。c と g の値が異なるモデル マトリックスを作成しています。ここでキーとなる -v オプションを使用します。予測されたモデルから、予測のために検証データセットを使用し、平均二乗誤差を計算します。この MSE を使用して、最適な c と g を選択します。クロス検証された出力を返す -v を使用しているため、従う手順は正しいですか?

4

1 に答える 1

3

num2str(jj) '-v 5']);まず、表示されているコードには、-v の前にスペースがないというわずかな問題があると思います。これにより、そのフラグが読み取られない場合があります。他の質問で、これは「時々モデルを返す」と述べましたが、これは、そのフラグが読み取られなかった場合に起こることです。フラグが読み取られる場合、「-v」フラグが使用されている場合、モデルではなく数値のみを取得する必要があります。

第二に、あなたはここで 2 つの異なることをしているように見えます。「-v」を指定して svmtrain を呼び出すと、トレーニング セットに対して交差検証が実行されます。それはモデルを返すべきではなく、mse 推定値を返すだけです。これらの推定値を使用して、最適なパラメーター設定を決定し、すべてのトレーニング データでその設定を使用して 1 つのモデルをトレーニングできます。

とにかく、次にホールドアウト検証セット testValX で svmpredict(y,x,model) を呼び出しますが、'-v' を指定して svmtrain を呼び出すと、モデルはこの時点でスカラーになるはずです。この呼び出しを正しく実行するには、'-v' を指定せずに svmtrain からモデルを取得して、構造体にする必要があります。残りの作業は、testValX を使用してホールドアウト検証を行っているこの場合には理にかなっています。

于 2013-12-05T01:07:07.583 に答える