2
私はかなり単純なSVM分類器[SVM = Support Vector Machine]と信じています。異なるパラメータで正規分布したデータを使って "テスト"すると、クラシファイアは私に50%の精度を返します。なにが問題ですか?ここで明確に分離可能なデータのための確率レベルの精度
はコードで、結果が再現可能でなければなりません:
features1 = normrnd(1,5,[100,5]);
features2 = normrnd(50,5,[100,5]);
features = [features1;features2];
labels = [zeros(100,1);ones(100,1)];
%% SVM-Classification
nrFolds = 10; %number of folds of crossvalidation
kernel = 'linear'; % 'linear', 'rbf' or 'polynomial'
C = 1; % C is the 'boxconstraint' parameter.
cvFolds = crossvalind('Kfold', labels, nrFolds);
for i = 1:nrFolds % iterate through each fold
testIdx = (cvFolds == i); % indices test instances
trainIdx = ~testIdx; % indices training instances
% train the SVM
cl = fitcsvm(features(trainIdx,:), labels(trainIdx),'KernelFunction',kernel,'Standardize',true,...
'BoxConstraint',C,'ClassNames',[0,1]);
[label,scores] = predict(cl, features(testIdx,:));
eq = sum(labels(testIdx));
accuracy(i) = eq/numel(labels(testIdx));
end
crossValAcc = mean(accuracy)
はいバグがあり、今すぐ実現しました!質問:それ以外は全体的なロジックが正しいですか?ハイパーパラメータを最適化していないとき(このように)、この検証精度は新しいテストセットの分類子の精度に等しいと思いますか? – Pegah
@ペガ本当にあなたのロジックは完璧です。この場合にハイパーパラメータを最適化しない場合でも、フィーチャスペースが完全に線形に分離可能である場合、各折り畳みでのクロスバリデーションの精度は、平均が実際の精度と一致する必要があります。 2つのデータディストリビューションの間に重複がないように、あなたは人為的にデータセットを作成しています。これにより、各折りたたみ時に同じクロス検証が確実に行われるはずです。 – rayryeng
は意味があります、thx非常に – Pegah