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

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

Но вот где я застрял. Я выбираю алгоритм кластеризации (Fuzzy C Means) (после изучения некоторых примеров K-средних) и Наивный Байес в качестве двух кандидатов на MCS (Multi-Classifier System).

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

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

Например:

Кластер 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.

Моя проблема в том, что происходит, если он неправильно классифицирует "другую" атаку как смурф или не находит оставшийся смурф.

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

Но это займет у меня некоторое время, так как я пока не знаю, как изменить / заменить существующие метки с neptune, back, ipsweep, wareclient на "other" в matlab, так что я пока не могу проверить эту теорию (получу там),

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

1) Есть ли лучший способ найти одну неуловимую атаку смарфа?

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

1 ответ

Решение

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

1) Есть ли лучший способ найти одну неуловимую атаку смарфа?

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

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

Для этого попробуйте следующий код Matlab.

clear all;
close all;
load fisheriris
IndexOfVirginica = strcmp (species, 'virginica');
IndexOfNotVirginica = IndexOfVirginica ==0;
otherSpecies = species;
otherSpecies(IndexOfNotVirginica) = {'other'};
otherSpecies
Другие вопросы по тегам