3

matlabで単純ベイズ分類器をテストすると、同じサンプルデータでトレーニングとテストを行ったにもかかわらず、異なる結果が得られます。コードが正しいかどうか、誰かがその理由を説明できるかどうか疑問に思いました。

%% dimensionality reduction 
columns = 6
[U,S,V]=svds(fulldata,columns);

%% randomly select dataset
rows = 1000;
columns = 6;

%# pick random rows
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';

%# pick random columns
%indY = randperm( size(fulldata,2) );
indY = indY(1:columns);

%# filter data
data = U(indX,indY);

%% apply normalization method to every cell
data = zscore(data);

%create a training set the same as datasample
training_data = data;

%match the class labels to the corresponding rows
target_class = classlabels(indX,:)

%classify the same data sample to check if naive bayes works
class  = classify(data, training_data, target_class, 'diaglinear')
confusionmat(test_class, class)

次に例を示します。

ここに画像の説明を入力してください

ipsweep、teardrop、backが通常のトラフィックと混同されていることに注意してください。見えないデータを分類する段階には至っていませんが、同じデータを分類できるかどうかをテストしたかっただけです。

混同行列の出力:

ans =

   537     0     0     0     0     0     0     1     0
     0   224     0     0     0     1     0     1     0
     0     0    91    79     0    17    24     4     0
     0     0     0     8     0     0     2     0     0
     0     0     0     0     3     0     0     0     0
     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     2     0     0
     0     0     0     0     0     0     0     3     0
     0     0     0     0     0     1     0     0     1

これが実際に何であるかはわかりませんが、コードでこれが間違っている可能性がありますが、出力を確認するためにテストするだけだと思いました。

4

1 に答える 1

5

次元削減されたデータに分類器を使用しています。分類子は、一般化する必要があるため、少し不正確になることを意味します。次元削減の段階では、情報が失われ、分類パフォーマンスも低下します。

トレーニングセットでも完璧なパフォーマンスを期待しないでください。これは過剰適合の悪いケースになります。

混同行列の使用について。C(3,4)=79つまり、79個のデータポイントの場合、クラスは3であり、クラス4として分類されます。完全なマトリックスは、分類子がクラス1と2でうまく機能するが、クラス3で問題があることを示しています。データがないため、分類器がそれらに対してどの程度適切に機能するかを判断することは困難です。

于 2012-07-19T08:08:10.900 に答える