そのため、私は次に何をすべきかについて岐路に立っています。複雑なデータセットにいくつかの機械学習アルゴリズムを学習して適用することに着手し、現在これを行っています。当初からの私の計画は、複数の分類システムを作成するために、2 つの可能な分類子を組み合わせることでした。
しかし、ここで私は立ち往生しています。MCS (Multi-Classifier System) の 2 つの候補として、クラスタリング アルゴリズム (Fuzzy C Means) (いくつかの K-means のサンプルを学習した後) と Naive Bayes を選択します。
データを分類するために両方を個別に使用できますが、意味のある方法で 2 つを組み合わせるのに苦労しています。
たとえば、ファジー クラスタリングは、通常1 つを除いて、ほぼすべての「スマーフ」攻撃をキャッチします。この奇妙なボールをキャッチしない理由はわかりませんが、私が知っているのは、そうでないことだけです。クラスターの 1 つはスマーフ攻撃によって支配され、通常、他のクラスターには 1 つのスマーフしか見つかりません。そして、ここで問題のシナリオに遭遇します。すべての異なる攻撃タイプ (スマーフ、ノーマル、ネプチューンなど) でベイズ分類器をトレーニングし、それを残りのクラスターに適用して最後の攻撃を見つけようとすると、スマーフのままだと、誤報率が高くなります。
どのように進めればよいかわかりません。他の攻撃をトレーニング セットから除外したくはありませんが、「スマーフ」攻撃を検出するようにベイズ分類器をトレーニングしたいだけです。現時点では、すべてを見つけようとするように訓練されており、この過程で精度が低下していると思います (確かではありません)。
これは単純なベイズ分類器を使用するときの私の質問です。どうすればスマーフだけを探し、それ以外をすべて「その他」に分類することができますか?
rows = 1000;
columns = 6;
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';
data = fulldata(indX, indY)
indX1 = randperm( size(fulldata,1) );
indX1 = indX1(1:rows)';
%% apply normalization method to every cell
%data = zscore(data);
training_data = data;
target_class = labels(indX,:)
class = classify(test_data,training_data, target_class, 'diaglinear')
confusionmat(target_class,class)
私が考えていたのはtarget_class
、すべての通常のトラフィックとスマーフ以外の攻撃を手動で変更することでした。次に、FCM が 1 つを除くすべてのスマーフ攻撃を正しく分類することを既に知っているので、残りのクラスターでナイーブ ベイズ分類器を使用する必要があります。
例えば:
クラスター 1 = 500 のスマーフ攻撃(この手順を繰り返すと、スマーフ攻撃の「大部分」が 1000 サンプルから別のクラスターに移動する可能性があるため、クラスターをチェックまたは反復して最大サイズを見つける必要があります。単純ベイズ分類器ステージ)
次に、残りの各クラスターで分類子をテストします (まだ matlab でループなどを行う方法がわからない) ため、現時点では処理中に手動で選択する必要があります。
clusters = 4;
CM = colormap(jet(clusters));
options(1) = 12.0;
options(2) = 1000;
options(3) = 1e-10;
options(4) = 0;
[~,y] = max(U);
[centers, U, objFun] = fcm(data, clusters, options); % cluster 1000 sample data rows
training_data = newTrainingData(indX1,indY); % this is the numeric data
test_data = fulldata(indX(y==2),:); % this is cluster 2 from the FCM phase which will be classified.
test_class = labels(indX(y==2),:); % thanks to amro this helps the confusion matrix give an unbiased error detection rate in the confusion matrix.
target_class = labels(indX,:) % this is labels for the training_data, it only contains the smurf attacks while everything else is classed as other
class = classify(test_data,training_data, target_class, 'diaglinear')
confusionmat(test_class,class)
次に、残りのクラスターごとにベイズ分類器を繰り返し、その 1 つのスマーフ攻撃を探します。
私の問題は、「他の」攻撃をスマーフとして誤分類したり、残りのスマーフを見つけられなかったりした場合にどうなるかです。
私はそれを行うためのより良い方法でちょっと迷っています。以前の質問で説明されたように、過度に適合させたくないため、「その他」に対するスマーフ攻撃の適切な比率を選択しようとしています。
ただし、既存のラベルをneptune、back、ipsweep、wareclient攻撃からmatlabの「その他」に変更/置換する方法がまだわからないため、これには時間がかかるため、この理論をまだテストできません(そこに到達します) .
だから私の質問は:
1) とらえどころのない 1 つのスマーフ攻撃を見つけるためのより良い方法はありますか。
2) target_class (ラベル) を grep して、smurf ではないすべてのものを「other」に置き換えるにはどうすればよいですか?