7
respostas

Classificação de dados de ataques a redes (ataque ou não ataque)

2 votar contra favorita Estou usando o dataset:

https://www.unsw.adfa.edu.au/unsw-canberra-cyber/cybersecurity/ADFA-NB15-Datasets/ O objetivo é classificar uma amostra como ataque ou não ataque. Uma boa ideia seria usar a regressão logística?

Fiz o código abaixo pra fazer pairplots no dataset. O problema é que o dataset tem 49 colunas e eu gostaria de filtrar as colunas a usar no pairplot, tentei fazer um slice na varíavel UNSW11, como UNSW11[:,1:5], dentro do pairplot mas recebi erro: "builtins.TypeError: unhashable type: 'slice'

Existe alguma forma de limitar o número de colunas a entrar no pairplot?

 # -*- coding: utf-8 -*-
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    UNSW11 = pd.read_csv('/home/govinda/Desktop/UNSW-NB15_1_ed.csv')
    sns.pairplot(UNSW11,palette='bwr',hue = 'class') #usar hue!
    plt.show()
7 respostas

Olá Edson, tudo bem?

Quando vamos treinar um modelo, é uma prática comum é utilizar diversos modelos, regressão logística, naive bayes, svm, e ver qual melhor se adequa ao seu conjunto de dados. No curso de machinne learning vemos como podemos fazer isso. :)

Em relação ao slice, o objeto que o pandas devolve na função read_csv é um DataFrame, por isso não conseguimos fazer o slice da mesma forma que em listas do Python...

Neste caso, temos que fazer o slice utilizando os labels do conjunto de dados.

Estou usando a biblioteca scikit-learn do Python.

No meu dataset já vieram 2 arquivos separados de teste e treino. Assim, não preciso usar o train_test_split, certo?

Fiz assim:

 X_train,y_train =train.drop('label',axis=1),train['label'] 
 X_teste,y_teste =teste.drop('label',axis=1),teste['label']

Onde

X será tudo exceto a classe, que é denominada 'label' e o y será apenas a coluna 'label'

Está fazendo sentido?

Oi Edson, faz sentido sim :)

Se você quiser você pode utilizar a validação cruzada, como o k-fold, para validar o modelo.

@Yuri Matheus:

Poderia mostrar algum código com sckit-learn sobre a validação cruzada com k-fold?

Opa Edson,

O cross_val_score vai receber um modelo como parâmetro e as variáves X e y. Ele irá utilizar o K-Fold para cruzar os dados, por padrão ele faz três cruzamentos, mas podemos alterar esse valor com o parâmetro cv. Essa função nos retorna um array com os scores do modelo em cada iteração.

Podemos utilizar esses valores para saber a média de acerto do nosso modelo:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

modelo = LinearRegression()
scores = cross_val_score(modelo, X, y)
media_de_acerto = sum(scores) / len(scores)

Com essa média podemos comparar vários modelos e ver qual melhor se adequa em nosso conjunto de dados. Descoberto o melhor modelo basta treiná-lo e utilizá-lo. :D

Ola Edson,

Você esta usando pandas, então tenta acessar os dados com iloc.. algo assim

UNSW11.iloc[:, 1:5]

acho que um modelo simples é um bom ponto de partida. Btw interessante esse dataset, não conhecia...

obs.: o dataset tem 9 tipos de ataques e você quer fazer uma regressão logística, isso pode ser um problema devido a distribuição da amostra...

@Welton Vaz de Souza: Só gostaria de detectar ataques DoS. Quais features você sugere escolher? Nao entendi sobre a distribuiçao da amostra...

As features disponíveis são:

1    srcip    nominal    Source IP address
2    sport    integer    Source port number
3    dstip    nominal    Destination IP address
4    dsport    integer    Destination port number
5    proto    nominal    Transaction protocol
6    state    nominal    Indicates to the state and its dependent protocol, e.g. ACC, CLO, CON, ECO, ECR, FIN, INT, MAS, PAR, REQ, RST, TST, TXD, URH, URN, and (-) (if not used state)
7    dur    Float    Record total duration
8    sbytes    Integer    Source to destination transaction bytes 
9    dbytes    Integer    Destination to source transaction bytes
10    sttl    Integer    Source to destination time to live value 
11    dttl    Integer    Destination to source time to live value
12    sloss    Integer    Source packets retransmitted or dropped 
13    dloss    Integer    Destination packets retransmitted or dropped
14    service    nominal    http, ftp, smtp, ssh, dns, ftp-data ,irc  and (-) if not much used service
15    Sload    Float    Source bits per second
16    Dload    Float    Destination bits per second
17    Spkts    integer    Source to destination packet count 
18    Dpkts    integer    Destination to source packet count
19    swin    integer    Source TCP window advertisement value
20    dwin    integer    Destination TCP window advertisement value
21    stcpb    integer    Source TCP base sequence number
22    dtcpb    integer    Destination TCP base sequence number
23    smeansz    integer    Mean of the ?ow packet size transmitted by the src 
24    dmeansz    integer    Mean of the ?ow packet size transmitted by the dst 
25    trans_depth    integer    Represents the pipelined depth into the connection of http request/response transaction
26    res_bdy_len    integer    Actual uncompressed content size of the data transferred from the servers http service.
27    Sjit    Float    Source jitter (mSec)
28    Djit    Float    Destination jitter (mSec)
29    Stime    Timestamp    record start time
30    Ltime    Timestamp    record last time
31    Sintpkt    Float    Source interpacket arrival time (mSec)
32    Dintpkt    Float    Destination interpacket arrival time (mSec)
33    tcprtt    Float    TCP connection setup round-trip time, the sum of synack and ackdat.
34    synack    Float    TCP connection setup time, the time between the SYN and the SYN_ACK packets.
35    ackdat    Float    TCP connection setup time, the time between the SYN_ACK and the ACK packets.
36    is_sm_ips_ports    Binary    If source (1) and destination (3)IP addresses equal and port numbers (2)(4)  equal then, this variable takes value 1 else 0
37    ct_state_ttl    Integer    No. for each state (6) according to specific range of values for source/destination time to live (10) (11).
38    ct_flw_http_mthd    Integer    No. of flows that has methods such as Get and Post in http service.
39    is_ftp_login    Binary    If the ftp session is accessed by user and password then 1 else 0. 
40    ct_ftp_cmd    integer    No of flows that has a command in ftp session.
41    ct_srv_src    integer    No. of connections that contain the same service (14) and source address (1) in 100 connections according to the last time (26).
42    ct_srv_dst    integer    No. of connections that contain the same service (14) and destination address (3) in 100 connections according to the last time (26).
43    ct_dst_ltm    integer    No. of connections of the same destination address (3) in 100 connections according to the last time (26).
44    ct_src_ ltm    integer    No. of connections of the same source address (1) in 100 connections according to the last time (26).
45    ct_src_dport_ltm    integer    No of connections of the same source address (1) and the destination port (4) in 100 connections according to the last time (26).
46    ct_dst_sport_ltm    integer    No of connections of the same destination address (3) and the source port (2) in 100 connections according to the last time (26).
47    ct_dst_src_ltm    integer    No of connections of the same source (1) and the destination (3) address in in 100 connections according to the last time (26).
48    attack_cat    nominal    The name of each attack category. In this data set , nine categories e.g. Fuzzers, Analysis, Backdoors, DoS Exploits, Generic, Reconnaissance, Shellcode and Worms
49    Label    binary    0 for normal and 1 for attack records