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

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

но вот где я застрял. Я выбираю алгоритм кластеризации (Fuzzy C Means) (после изучения некоторых образцов k-средних) и наивный Байес в качестве двух кандидатов для MCS (Система Мульти-Классификатора).

Я могу использовать оба независимо для классификации данных, но я изо всех сил пытаюсь объединить их значимым образом.

например, нечеткая кластеризация ловит почти все атаки "Smurf", за исключением обычно один и я не уверен, почему он не поймать этот странный шар но я знаю только, что это не так. В одном из кластеров будут доминировать атаки smurf, и обычно я найду только одного smurf в другом кассет. И вот где я сталкиваюсь с проблемным сценарием, если я тренирую классификатор Байеса на всех разных типах атаки (Smurf, normal, neptune... и т. д.) и примените это к остальным кластерам, пытаясь найти последний оставшийся smurf, он будет иметь высокую частоту ложных тревог.

Я не уверен, как действовать, я не хочу брать другие атаки из тренировочного набора, но я хочу только обучить классификатор Байеса, чтобы обнаружить атаки "Смурфов". На данный момент это натренированный, чтобы попытаться обнаружить все, и в этом процессе я думаю (не уверен), что точность падает.

Итак, это мой вопрос при использовании наивного классификатора Байеса, как бы вы могли заставить его искать только 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 от всего обычного трафика и атак, которые arent smurf до другое. Тогда, как я уже знаю, что FCM правильно классифицирует все, кроме одна атака smurf, я просто должен использовать наивный классификатор Байеса на оставшихся кластерах.

например:

кластер 1 = 500 атак smurf (повторение этого шага может переместить "большинство" атак 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.

Я чувствую себя потерянным на лучший способ сделать это. Я в процессе попытки чтобы выбрать хорошее соотношение атак smurf к "другим", как я не хочу перестраиваться, что было объяснено в предыдущем вопросе здесь.

но это займет у меня некоторое время, так как я еще не знаю, как изменить/заменить существующие метки из Neptune, back, ipsweep, wareclient атак на "другие" в matlab, поэтому я еще не могу проверить эту теорию (доберусь туда).

Итак, мой вопрос:

1) Есть ли лучший способ найти неуловимого Смурф атака.

2) Как я могу grep target_class (метки) заменить все, что не является smurf на "другое"

1 ответов


Я постараюсь частично ответить на ваши вопросы.

1) Есть ли лучший способ найти эту неуловимую атаку smurf.

Я предлагаю вам не попробовать это. 1 в 500. Это почти очевидный случай чрезмерной подгонки ваших данных. Ваш классификатор не будет хорошо обобщать тестовые данные.

2) Как я могу grep target_class (метки) заменить все, что не является smurf, на "другое"

для этого попробовать следуя коду matlab.

clear all;
close all;
load fisheriris
IndexOfVirginica = strcmp (species, 'virginica');
IndexOfNotVirginica = IndexOfVirginica ==0;
otherSpecies = species;
otherSpecies(IndexOfNotVirginica) = {'other'};
otherSpecies