9

तो मैं आगे क्या करना है, इस पर एक क्रॉस सड़कों पर हूं, मैंने एक जटिल डेटासेट पर कुछ मशीन लर्निंग एल्गोरिदम सीखने और लागू करने के लिए तैयार किया है और अब मैंने यह किया है। बहुत शुरुआत से मेरी योजना एक बहु वर्गीकरण प्रणाली बनाने के प्रयास में दो संभावित वर्गीकरणियों को गठबंधन करना था।क्लस्टरिंग और बेयस क्लासिफायर मैटलैब

लेकिन यहां वह जगह है जहां मैं फंस गया हूं। मैं एमसीएस (मल्टी-क्लासिफायर सिस्टम) के लिए दो उम्मीदवारों के रूप में क्लस्टरिंग एल्गोरिदम (फ़ज़ी सी मीन्स) (कुछ नमूना के-साधन सामान सीखने के बाद) और बेवकूफ बेयस चुनता हूं।

मैं डेटा को वर्गीकृत करने के लिए स्वतंत्र रूप से दोनों का उपयोग कर सकता हूं लेकिन मैं दोनों को सार्थक तरीके से गठबंधन करने के लिए संघर्ष कर रहा हूं।

उदाहरण के लिए फजी क्लस्टरिंग आमतौर पर के लिए एक को छोड़कर लगभग सभी "Smurf" हमलों लग जाती है और मुझे यकीन है कि नहीं करता है क्यों यह इस अजीब गेंद पकड़ नहीं हूँ, लेकिन सब मुझे पता है यह does not है। समूहों में से एक को smurf हमलों का प्रभुत्व होगा और सामान्य रूप से मुझे अन्य समूहों में सिर्फ एक smurf मिल जाएगा। और यहां वह जगह है जहां मैं समस्या परिदृश्य में भाग लेता हूं, अगर मैं सभी अलग-अलग हमले प्रकारों (स्मरफ, सामान्य, नेप्च्यून ... आदि) पर बेयस क्लासिफायरफायर को प्रशिक्षित करता हूं और क्लस्टर को शेष को खोजने के प्रयास में इसे लागू करता हूं शेष smurf यह एक उच्च झूठी अलार्म दर होगी।

मुझे यकीन नहीं है कि कैसे आगे बढ़ना है, मैं अन्य हमलों को प्रशिक्षण सेट से बाहर नहीं लेना चाहता हूं, लेकिन मैं केवल "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 बदल रहा था। तब जब मैं पहले से ही जानता हूं कि एफसीएम सही ढंग से सभी को वर्गीकृत करता है लेकिन एक smurf हमला करता है, तो मुझे शेष क्लस्टर पर बेवकूफ बेयस क्लासिफायरफायर का उपयोग करना होगा।

उदाहरण के लिए:

क्लस्टर 1 = 500 स्मर्फ हमलों (यह चरण एक अलग क्लस्टर में 1000 नमूनों से स्मर्फ हमलों की "बहुमत" शिफ़्ट हो सकता तो मैं जाँच करें या समूहों के माध्यम से पुनरावृति करने के लिए है दोहरा सबसे बड़े आकार के लिए, एक बार पाया गया कि मैं इसे बेवकूफ बेयस क्लासिफायरफायर चरण से हटा सकता हूं)

फिर मैं प्रत्येक शेष क्लस्टर पर क्लासिफायर का परीक्षण करता हूं (सुनिश्चित नहीं है कि अभी तक मैटलैब में लूप आदि कैसे करें) तो इस समय मुझे मैन्युअल रूप से प्रसंस्करण के दौरान उन्हें उठाओ।

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 हमलों का एक अच्छा अनुपात चुनने की कोशिश करने की प्रक्रिया में हूं क्योंकि मैं पिछले प्रश्न here में समझाया गया था कि मैं अधिक फिट नहीं करना चाहता हूं।

लेकिन यह मुझे कुछ समय लगेगा क्योंकि मुझे अभी तक पता नहीं है कि मौजूदा लेबल को नेप्च्यून, बैक, इप्सवेप, वेयरक्लिएंट हमलों से मैटलैब में "अन्य" में बदलने/बदलने के लिए कैसे है, इसलिए मैं अभी तक इस सिद्धांत का परीक्षण नहीं कर सकता (वहाँ मिल जाएगा)। कि एक मायावी स्मर्फ हमले की खोज करने में एक बेहतर तरीका

1) है वहाँ:

तो मेरे सवाल है।

2) मैं target_class (लेबल) सब कुछ है कि के साथ Smurf नहीं है को बदलने के लिए कैसे grep कर सकते हैं "अन्य"

+0

क्लस्टरिंग का उपयोग न करने का प्रयास करें, लेकिन सीधे क्लासिफायर सीखना। या क्लस्टर के बीच कुछ ओवरलैप की इजाजत देता है। यदि आपके पास एक क्लस्यूटर में एक एकल Smurf उदाहरण है, तो आपकी सीखने की प्रक्रिया शायद * * संगठन * होगी। प्रशिक्षण सेट में आपको इस कक्षा के अधिक प्रशिक्षण डेटा की आवश्यकता है। –

+1

या केवल * कक्षाओं के भीतर क्लस्टरिंग * का उपयोग करने का प्रयास करें। फिर विशेष क्लस्टर को पहचानने के लिए ट्रेन को एक-श्रेणी-वर्गीकृत सीखें। यह समझ में आता है कि विभिन्न प्रकार के स्मरफ/सामान्य/आदि हैं। –

उत्तर

1

मैं आंशिक रूप से आपके सवालों के जवाब देने की कोशिश करेंगे।

1) क्या यह एक छद्म स्मोर्फ हमला खोजने में एक बेहतर तरीका है।

मेरा सुझाव है कि आप इसे आजमाएं। 500 में 1। यह लगभग आपके डेटा को फ़िट करने के मामले में स्पष्ट रूप से एक मामला है। आपका वर्गीकरण डेटा परीक्षण करने के लिए अच्छी तरह से सामान्यीकृत नहीं होगा।

2) मैं target_class (लेबल) सब कुछ है कि "अन्य"

साथ Smurf नहीं है यह निम्न प्रयास matlab कोड के लिए बदलने के लिए कैसे grep कर सकते हैं।

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