Кластеризация и классификаторы Байеса 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