Quindi sono a un incrocio su cosa fare dopo, ho deciso di imparare e applicare alcuni algoritmi di apprendimento automatico su un set di dati complicato e ora ho fatto questo. Il mio piano fin dall'inizio era quello di combinare due possibili classificatori nel tentativo di creare un sistema multi-classificazione.Classificatori di Clustering e Bayes Matlab
Ma qui è dove sono bloccato. Scelgo un algoritmo di clustering (Fuzzy C Means) (dopo aver appreso alcuni esempi di K-means stuff) e Naive Bayes come i due candidati per MCS (Multi-Classifier System).
Posso utilizzare entrambi in modo indipendente per classificare i dati, ma sto lottando per combinare i due in modo significativo.
Ad esempio il raggruppamento Fuzzy cattura quasi tutti gli attacchi "smurf" ad eccezione di solito uno e io non sono sicuro perché si pretende molto prendere questo strana palla ma tutto quello che so è che pretende molto. Uno dei cluster sarà dominato dagli attacchi di smurf e di solito trovo solo un puffo negli altri cluster. Ed ecco dove mi imbatto nello scenario del problema, se alleno il classificatore bayes su tutti i diversi tipi di attacco (Smurf, normale, nettuno ... ecc.) E lo applico al resto dei cluster nel tentativo di trovare quest'ultimo rimanendo puffo avrà un alto tasso di falsi allarmi.
Non so come procedere, non voglio prendere gli altri attacchi dal set di allenamento ma voglio solo addestrare il classificatore bayes per individuare gli attacchi "Puffo". Al momento è addestrato a cercare di individuare ogni cosa, e in questo processo penso (non sono sicuro) che la precisione sia stata eliminata.
Quindi questa è la mia domanda quando si utilizza il classificatore naive bayes, come si otterrebbe solo cercare smurf e categorizzare tutto il resto come "Altro".
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)
Quello che stavo pensando stava cambiando manualmente target_class
da tutto il traffico normale e gli attacchi che arent puffo a altri. Quindi, poiché so già che FCM classifica correttamente tutti tranne un attacco smurf, devo solo usare il classificatore naive bayes sui cluster rimanenti.
Ad esempio:
Cluster 1 = 500 attacchi Smurf (ripetere questo passo potrebbe spostare "maggioranza" degli attacchi Smurf dei 1000 campioni in un cluster diverso così ho controllare o scorrere i cluster per la dimensione più grande, una volta trovato posso rimuoverlo dallo stadio di classificatore naive bayes)
Quindi eseguo il test del classificatore su ciascun cluster rimanente (non so come fare i loop ecc ancora in matlab) quindi al momento devo selezionali manualmente durante l'elaborazione.
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)
Quindi ripeto il classificatore bayes per ciascuno dei cluster rimanenti, alla ricerca di quell'unico attacco smurf.
Il mio problema è cosa succede se si classifica erroneamente un attacco "altro" come un puffo o non trova l'unico puffo rimasto.
Mi sento un po 'perso su un modo migliore di farlo. Sto cercando di selezionare un buon rapporto tra gli attacchi smurf e "altro", in quanto non voglio fare un adattamento eccessivo, come spiegato in una precedente domanda here.
Ma questo mi richiederà un po 'di tempo perché non so ancora come cambiare/sostituire le etichette esistenti da nettuno, indietro, ipsweep, attacchi da wareclient a "altro" in MATLAB, quindi non posso ancora testare questa teoria (ci arriverà). ci
1) è un metodo migliore a trovare che un attacco Smurf sfuggente:
Quindi la mia domanda è.
2) Come posso grep il target_class (etichette) per sostituire tutto ciò che non è PUFFA CON "altri"
Provare a non utilizzare il clustering, ma le classificazioni di apprendimento direttamente. O permettendo qualche sovrapposizione tra i cluster. Se hai una singola istanza di Smurf in un clsuter, probabilmente il tuo processo di apprendimento * si limiterà * al completamento *. Devi avere più dati di allenamento di questa classe nel set di allenamento. –
Oppure provare a utilizzare il clustering * solo nelle * classi. Quindi impara a formare classificatori di una classe per riconoscere il particolare cluster. È logico supporre che ci siano diversi tipi di puffo/normale/ecc. –