Итак, я на распутье, что делать дальше, я решил изучить и применить некоторые алгоритмы машинного обучения к сложному набору данных, и теперь я сделал это. Мой план с самого начала заключался в том, чтобы объединить два возможных классификатора, чтобы попытаться создать множественную -систему классификации.
Но вот где я застрял. Я выбираю алгоритм кластеризации (Fuzzy C Means)(после изучения некоторой выборки K -означает вещество )и Наивного Байеса как двух кандидатов для MCS (Multi -Classifier System ).
Я могу использовать оба независимо друг от друга для классификации данных, но я изо всех сил пытаюсь объединить их осмысленным образом.
Например, кластеризация Fuzzy ловит почти все атаки «Смурфа», за исключением обычно одной , и я не уверен, почему она не ловит этот странный шар , но все, что я знаю, это то, что это не так. В одном из кластеров будут преобладать атаки smurf, и обычно я найду только одного smurf в других кластерах. И вот где я сталкиваюсь с проблемой, если я обучу байесовский классификатор всем типам атак (Smurf, normal, neptune... и т. д. )и применю его к остальным кластерам в попытке чтобы найти последний оставшийся смурф, у него будет высокий уровень ложных срабатываний.
Я не уверен, что делать дальше, я не хочу исключать другие атаки из тренировочного набора, но я хочу только обучить классификатор байеса обнаруживать атаки «Смурф». На данный момент его обучают пытаться все замечать, и в этом процессе я думаю (не уверен ), что точность падает.
Итак, это мой вопрос при использовании наивного байесовского классификатора,как бы вы заставили его искать только smurf и классифицировать все остальное как «Другое».
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
весь обычный трафик и атаки, которые не являются smurf, на другие . Затем, поскольку я уже знаю, что FCM правильно классифицирует все атаки smurf, кроме одной, мне просто нужно использовать наивный байесовский классификатор для остальных кластеров.
Например:
Кластер 1 = 500 смурф-атак(повторение этого шага может сместить «большинство» smurf-атак из 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)
Затем я повторяю байесовский классификатор для каждого из оставшихся кластеров, ища эту атаку smurf.
Моя проблема заключается в том, что произойдет, если он ошибочно классифицирует «другую» атаку как smurf или не найдет один оставшийся smurf.
Я чувствую себя потерянным в поисках лучшего способа сделать это. Я пытаюсь подобрать хорошее соотношение смурф-атак и «других», так как не хочу, чтобы они соответствовали -, что было объяснено в предыдущем вопросе здесь .
Но это займет у меня некоторое время, так как я еще не знаю, как изменить/заменить существующие метки с атак neptune, back, ipsweep, wareclient на «другое» в Matlab, поэтому я пока не могу проверить эту теорию (. там ).
Итак, мой вопрос:
1 )Есть ли лучший метод обнаружения этой неуловимой атаки смурфа.
2 )Как я могу выполнить grep целевого _класса (метки ), чтобы заменить все, что не smurf, на " другое "