Кластеризация и байесовские классификаторы Matlab

Итак, я на распутье, что делать дальше, я решил изучить и применить некоторые алгоритмы машинного обучения к сложному набору данных, и теперь я сделал это. Мой план с самого начала заключался в том, чтобы объединить два возможных классификатора, чтобы попытаться создать множественную -систему классификации.

Но вот где я застрял. Я выбираю алгоритм кластеризации (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, на " другое "

9
задан Community 23 May 2017 в 02:13
поделиться