Partage
  • Partager sur Facebook
  • Partager sur Twitter

MachineLearning - Classifi multiclass/multilabel

LabelPowerset()

    7 mai 2020 à 16:04:54

    Bonjour, 

    Je veux construire un modèle de classification multiclass-multilabel. Pour adapter mon classifieur au multilabel j'ai opté pour un Problem Transformation à l'aide de LabelPowerset().

    Mon modèle est destiné à la détection des attaques sur des objets iot, j'ai donc une base avec des comportement étiquetés comme étant begnins, ou une attaque ( j'ai 2types d'attaque et 5sous-types d'attaque pour chaque attaque) donc en tout 10classes d'attaque et une classe benign ce que me fait un total de 11 classes.

    Donc pour un comportement classé comme étant une attaque je devrais avoir en prédiction quelque chose comme [Attaque, type_attaque, soustype_attaque] et pour un comportement begnin quelque chose comme [begnin, begnin, begnin]. 

    J'encode ma variable y pour pouvoir utiliser LabelPowerset et j'obtiens: 

    Et quand je teste le modele, le probleme c'est la forme des predictions (pre) qui fait que je ne peux pas manipuler les prédictions pour des metrics : 

    """
    Importation des bases 
    """
    
    import pandas as pd
    
    #Benign 
    benign = pd.read_csv('benign_traffic.csv', sep = ',')
    #Mirai
    Mirai_ack = pd.read_csv('Mirai_ack.csv', sep = ',')
    Mirai_scan = pd.read_csv('Mirai_scan.csv', sep = ',')
    Mirai_syn = pd.read_csv('Mirai_syn.csv', sep = ',')
    Mirai_udp = pd.read_csv('Mirai_udp.csv', sep = ',')
    Mirai_udpplain = pd.read_csv('Mirai_udpplain.csv', sep = ',')
    #BASHLITE
    BASH_combo = pd.read_csv('BASH_combo.csv', sep = ',')
    BASH_junk = pd.read_csv('BASH_junk.csv', sep = ',')
    BASH_scan = pd.read_csv('BASH_scan.csv', sep = ',')
    BASH_tcp = pd.read_csv('BASH_tcp.csv', sep = ',')
    BASH_udp = pd.read_csv('BASH_udp.csv', sep = ',')
    
    
    
    
    """
    Etiquettage
    """
    
    benign['label_1'] = 'benign'
    benign['label_2'] = 'benign'
    benign['label_3'] = 'benign'
    
    Mirai_ack['label_1'] = 'Attack'
    Mirai_ack['label_2'] = 'Mirai'
    Mirai_ack['label_3'] = 'Mirai_ack'
    
    Mirai_scan['label_1'] = 'Attack'
    Mirai_scan['label_2'] = 'Mirai'
    Mirai_scan['label_3'] = 'Mirai_scan'
    
    Mirai_syn['label_1'] = 'Attack'
    Mirai_syn['label_2'] = 'Mirai'
    Mirai_syn['label_3'] = 'Mirai_syn'
    
    Mirai_udp['label_1'] = 'Attack'
    Mirai_udp['label_2'] = 'Mirai'
    Mirai_udp['label_3'] = 'Mirai_udp'
    
    Mirai_udpplain['label_1'] = 'Attack'
    Mirai_udpplain['label_2'] = 'Mirai'
    Mirai_udpplain['label_3'] = 'Mirai_udpplain'
    
    BASH_combo['label_1'] = 'Attack'
    BASH_combo['label_2'] = 'BASH'
    BASH_combo['label_3'] = 'BASH_combo'
    
    BASH_junk['label_1'] = 'Attack'
    BASH_junk['label_2'] = 'BASH'
    BASH_junk['label_3'] = 'BASH_junk'
    
    BASH_scan['label_1'] = 'Attack'
    BASH_scan['label_2'] = 'BASH'
    BASH_scan['label_3'] = 'BASH_scan'
    
    BASH_tcp['label_1'] = 'Attack'
    BASH_tcp['label_2'] = 'BASH'
    BASH_tcp['label_3'] = 'BASH_tcp'
    
    BASH_udp['label_1'] = 'Attack'
    BASH_udp['label_2'] = 'BASH'
    BASH_udp['label_3'] = 'BASH_udp'
    
    
    
    """
    Concaténation
    """
    
    data=pd.concat((benign,Mirai_ack,Mirai_scan,Mirai_syn,Mirai_udp,Mirai_udpplain,BASH_combo,BASH_junk,BASH_scan,BASH_tcp,BASH_udp),axis=0,ignore_index = False)
    
    
    """
    X/y
    """
    
    label = ['label_1','label_2','label_3']
    y = data[label]
    X = data.drop(label,axis=1)
    
     
    """
    Encodage y
    """
    
    y['label_1'] = y['label_1'] .astype('category')
    y['label_2']  = y['label_2'] .astype('category')
    y['label_3']  = y['label_3'] .astype('category')
    y = pd.get_dummies(y)
    
    
    """
    Diviser la base train/test
    """
    
    from sklearn.model_selection import train_test_split
    
    Size_validation = 1/3
    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=Size_validation ,  random_state=42)  
    
    
    """
    importation du classifieur
    """
    
    from sklearn.naive_bayes import GaussianNB
    clf = GaussianNB()
    
    #adaptation
    from skmultilearn.problem_transform import LabelPowerset
    clf = LabelPowerset(clf)
    
    
    
    """
    trainning the classifier
    """
    
    clf.fit(X_train, y_train)
    
    
    
    """
    prédiction
    """
    pre = clf.predict(X_test)

    -
    Edité par MichaOuchait 7 mai 2020 à 21:33:43

    • Partager sur Facebook
    • Partager sur Twitter

    MachineLearning - Classifi multiclass/multilabel

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown