9

Vì vậy, tôi đang ở một con đường ngang để làm gì tiếp theo, tôi bắt đầu học và áp dụng một số thuật toán học máy trên một tập dữ liệu phức tạp và bây giờ tôi đã làm điều này. Kế hoạch của tôi ngay từ đầu là kết hợp hai bộ phân loại có thể trong một nỗ lực để tạo ra một hệ thống đa phân loại.Clustering và Bayes classifier Matlab

Nhưng đây là nơi tôi bị kẹt. Tôi chọn một thuật toán phân cụm (Fuzzy C Means) (sau khi học một số mẫu K-means stuff) và Naive Bayes là hai ứng cử viên cho MCS (Multi-Classifier System).

Tôi có thể sử dụng cả hai cách độc lập để phân loại dữ liệu nhưng tôi đang cố gắng kết hợp cả hai theo cách có ý nghĩa.

Ví dụ clustering Fuzzy bắt hầu hết các "Smurf" tấn công trừ thường một và tôi không chắc chắn lý do tại sao nó không bắt này lẻ bóng nhưng tất cả tôi biết là nó không. Một trong những cụm sẽ bị chi phối bởi các cuộc tấn công smurf và thường lệ tôi sẽ chỉ tìm thấy một smurf trong các cụm khác. Và đây là nơi tôi chạy vào kịch bản vấn đề, nếu tôi đào tạo bộ phân loại bay trên tất cả các kiểu tấn công khác nhau (Smurf, bình thường, neptune ... vv) và áp dụng điều đó cho phần còn lại của cụm để tìm cách cuối cùng còn lại smurf nó sẽ có một tỷ lệ báo động giả cao.

Tôi không chắc chắn làm thế nào để tiến hành, tôi không muốn lấy các cuộc tấn công khác ra khỏi tập huấn luyện nhưng tôi chỉ muốn đào tạo phân loại bayes để phát hiện các cuộc tấn công "Smurf". Tại thời điểm nó được đào tạo để thử và phát hiện tất cả mọi thứ, và trong quá trình này tôi nghĩ (không chắc chắn) rằng độ chính xác được giảm xuống.

Vì vậy, đây là câu hỏi của tôi khi sử dụng bộ phân loại vịnh ngây thơ, làm thế nào bạn sẽ có được nó để chỉ tìm kiếm smurf và phân loại mọi thứ khác là "Khác".

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) 

Những gì tôi đã suy nghĩ được bằng tay thay đổi target_class từ tất cả các giao thông bình thường và các cuộc tấn công mà arent Smurf để khác. Sau đó, như tôi đã biết rằng FCM phân loại chính xác tất cả trừ một cuộc tấn công Smurf, tôi chỉ phải sử dụng phân loại bay ngây thơ trên các cụm còn lại.

Ví dụ:

Cụm 1 = 500 tấn công Smurf (lặp lại bước này có thể chuyển sang các "phần lớn" các cuộc tấn công Smurf từ 1000 mẫu vào một cụm khác nhau vì vậy tôi đã kiểm tra hoặc lặp qua các cụm kích thước lớn nhất, một khi tìm thấy tôi có thể loại bỏ nó khỏi giai đoạn phân loại vịnh ngây thơ)

Sau đó tôi kiểm tra phân loại trên mỗi cụm còn lại (không chắc chắn cách thực hiện vòng lặp vv trong MATLAB). chọn thủ công chúng trong quá trình xử lý.

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) 

Sau đó tôi lặp lại bộ phân loại bay cho mỗi cụm còn lại, tìm kiếm một cuộc tấn công smurf đó.

Vấn đề của tôi là những gì sẽ xảy ra nếu nó phân loại sai một cuộc tấn công "khác" thành một smurf hoặc không tìm thấy một người còn lại smurf.

Tôi cảm thấy mất phương hướng tốt hơn để làm điều đó. Tôi đang trong quá trình cố gắng chọn một tỷ lệ tốt của các cuộc tấn công Smurf để "khác" như tôi không muốn quá phù hợp đã được giải thích trong một câu hỏi trước here.Nhưng điều này sẽ đưa tôi một thời gian vì tôi chưa biết cách thay đổi/thay thế các nhãn hiện có từ neptune, back, ipsweep, tấn công wareclient thành "other" trong MATLAB vì vậy tôi chưa thể kiểm tra lý thuyết này ra (sẽ đến đó).

Vì vậy, câu hỏi của tôi là:

1) Có phương pháp nào tốt hơn trong việc tìm ra một đòn tấn công khó nắm bắt.

2) Làm thế nào tôi có thể grep target_class (nhãn) để thay thế tất cả những gì không được Smurf với "khác"

+0

Cố gắng không sử dụng phân cụm, nhưng trực tiếp học tập. Hoặc cho phép một số chồng chéo giữa các cụm. Nếu bạn có một cá thể Smurf duy nhất trong một clsuter, quá trình học của bạn có thể sẽ chỉ * overfit *. Bạn cần phải có thêm dữ liệu đào tạo của lớp này trong tập huấn luyện. –

+1

Hoặc cố gắng chỉ sử dụng nhóm * trong các lớp *. Sau đó học các lớp học phân loại một lớp để nhận ra cụm cụ thể. Điều đó có ý nghĩa giả định rằng có nhiều loại khác nhau của smurf/normal/etc. –

Trả lời

1

tôi sẽ cố gắng phần nào giải đáp thắc mắc của bạn.

1) Có phương pháp nào tốt hơn trong việc tìm ra một đòn tấn công Smurf khó nắm bắt.

Tôi khuyên bạn không nên thử điều này. 1 trong 500. Điều này gần như rõ ràng là trường hợp kết hợp dữ liệu của bạn. Trình phân loại của bạn sẽ không tổng quát tốt để kiểm tra dữ liệu.

2) Làm thế nào tôi có thể grep target_class (nhãn) để thay thế tất cả những gì không được Smurf với "khác"

Đối với điều này thử sau mã MATLAB.

clear all; 
close all; 
load fisheriris 
IndexOfVirginica = strcmp (species, 'virginica'); 
IndexOfNotVirginica = IndexOfVirginica ==0; 
otherSpecies = species; 
otherSpecies(IndexOfNotVirginica) = {'other'}; 
otherSpecies 
Các vấn đề liên quan