2012-01-10 4 views
1

このページの例:Example of 10-fold SVM classification in MATLABに従っています。機能を正しく分類できません

基本的には、分類を実行するための例に従っています。私が直面している問題は、predは常にpostiveです。マイナスのデータは検出できません。

clear all; 
clc; 
load('C:\Users\HP\Documents\MATLAB\TrainLabel'); 
load('C:\Users\HP\Documents\MATLAB\TrainVec'); 
cvFolds = crossvalind('Kfold', TrainLabel, 10); 
cp = classperf(TrainLabel); 
for i = 1:10         
    testIdx = (cvFolds == i);     
    trainIdx = ~testIdx;        
%  Model = svmtrain(TrainVec(trainIdx,:), TrainLabel(trainIdx),'showplot',true); 
    Model = svmtrain(TrainVec(trainIdx,:), TrainLabel(trainIdx), ...    
    'Autoscale',true, 'Showplot',false, 'Method','QP', ...    
    'BoxConstraint',2e-1, 'Kernel_Function','rbf', 'RBF_Sigma',1); 
    pred = svmclassify(Model, TrainVec(testIdx,:),'Showplot',false);  
    cp = classperf(cp, pred, testIdx); 
end 
cp.CorrectRate 
cp.CountingMatrix 

PREDの値[1; 1; 1; 1; 1; 1]私correctrateは0.65(65%)であり、TrainLabelが< 60x1二重である>とTrainVec>は二重< 60x5900あります。

つ以上QNS:

  1. TrainLabelの値は0と1でなければなりませんか?それが-1か1であればOKですか?

  2. TrainVecはイメージの各機能が行に配置されるようなものです。次の画像の特徴が次の行に配置されます。これは正しいです?またはそれぞれのフィーチャを別の列に配置する必要がありますか?

この上でいくつかの助けが必要...おかげ

答えて

-1

スケール1.本に0が問題全ての

+1

これは間違っています。あなたは5900の機能を手に入れません。それ以外に、 '' doc svmtrain'を見てください: " ** autoscale **: svmtrainは自動的にデータポイントを平均でセンタリングし、それらの平均値を単位標準偏差 デフォルト:true "です。 スケールするかどうかは関係ありません。 – jpjacobs

+0

しかし、私は冗談ではありません – user999450

4

あなただけの多くの機能を持っています。

60個のトレーニングポイントだけを使用して、5899次元の超平面を見つけようとしています。 Curse of dimensionality(別名:Hughesエフェクト)のために単純に動作しません。

まず、関連する機能を抽出し、それらの機能のみを処理する必要があります。これはFeature Extractionと呼ばれます。これを行うための

簡単な方法としては、(98%のような分散のk個のPCの説明certrainレベルを、維持するために第三、EXPLAINED結果を使用)のみ一定の割合を維持し、その後、Principle Component Analysisを使用してデータを変換するためにpcacovを使用しています。それは問題の次元を短くし、結果を改善する可能性が非常に高いです。

すべてを覚えておいてください。訓練セットだけでなく、データを変換してください。

それに加えて、あなたのアプローチは私にとって正しいようです。さまざまなサンプルが異なる行に表示され、その機能が列にまたがって表示されます。ラベルベクトルは、あなたがしたいと思うものは何でもすることができ

Yはすなわち、それは 、カテゴリ、数値、または論理ベクトルすることができ、グループ化変数です。文字列のセルベクトル。またはクラスラベルを表し、各行と 文字行列は

+0

まず、返信用のおかげを解決する間に値を( groupingvariableのヘルプを参照します)。私は本当に感謝しています。一つは、私のコードは、PCAの部分以外に適切に書かれていますか? – user999450

+0

私は問題は彼があまりにも多くの機能を持っているのではなく、彼がいくつかの模範を持っているということではないと言います... – Oli

+0

模範が意味することは? – user999450

関連する問題