Pular para o conteúdo principal
Versões: 0.5.x

BNSA

Algoritmo de Seleção Negativa Binária (BNSA).

Herança

Esta classe herda de BaseClassifier

Módulo: aisp.nsa
Importação: from aisp.nsa import BNSA


Visão geral

Algoritmo para classificação e detecção de anomalias baseado na distinção entre próprio e não-próprio, inspirado no algoritmo de seleção negativa.

observação

O Binary Negative Selection Algorithm (BNSA) é baseado na proposta original de Forrest et al. (1994) 1, desenvolvido para segurança na computação. Nesta adaptação, o algoritmo usa arrays de bits e possuir suporte para classificação multiclasse.

aviso

Valores altos de aff_thresh podem impedir que gere detectores válidos para a detecção do não-próprio.


Exemplo

from aisp.nsa import BNSA

# Binary 'self' samples
x_train = [
[0, 0, 1, 0, 1],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 1],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0]
]
y_train = ['self', 'self', 'self', 'self', 'self', 'self']
bnsa = BNSA(aff_thresh=0.55, seed=1)
bnsa = bnsa.fit(x_train, y_train, verbose=False)
# samples for testing
x_test = [
...[1, 1, 1, 1, 1], # Sample of Anomaly
...[0, 1, 0, 1, 0], # self sample
...]
y_prev = bnsa.predict(X=x_test)
print(y_prev)

Output

['non-self' 'self']

Parâmetros do Construtor

NomeTipoDefaultDescrição
Nint100Quantidade de detectores.
aff_threshfloat0.1Representa a porcentagem de similaridade entre a célula T e as amostras próprias. O valor padrão é de 10% (0,1), enquanto que o valor de 1,0 representa 100% de similaridade.
max_discardsint1000Número máximo de descartes de detectores em sequência, com o objetivo de evitar um possível loop infinito caso seja definido um raio que não seja possível gerar detectores do não-próprio.
seedOptional[int]NoneSeed para geração aleatória.
no_label_sample_selectionstr'max_average_difference'Método utilizado para a escolha de rótulos para amostras classificada como não-próprio por todos os detectores.

Atributos

NomeTipoPadrãoDescrição
detectorsOptional[Dict[str | int, npt.NDArray[np.bool_]]]-Conjunto de detectores, organizados por classe.

Métodos Públicos

fit

def fit(
self,
X: Union[npt.NDArray, list],
y: Union[npt.NDArray, list],
verbose: bool = True,
) -> BNSA:
...

Treinamento de acordo com X e y, utilizando o algoritmo de seleção negativa.

Parâmetros

NomeTipoPadrãoDescrição
XUnion[npt.NDArray, list]-Amostras de entrada para treinamento. Cada linha corresponde a uma amostra e cada coluna a uma característica.
yUnion[npt.NDArray, list]-Vetor alvo no formato (n_samples,). Deve conter o mesmo número de amostras que X.
verboseboolTrueSe True, exibe informações sobre o progresso do treinamento.

Returns

TipoDescrição
SelfRetorna a instancia da classe.

Exceções

ExceçãoDescrição
TypeErrorSe X ou y não forem ndarrays ou tiverem tamanhos incompatíveis.
ValueErrorSe X possuir valores diferentes de (0 e 1) ou (True e False).
MaxDiscardsReachedErrorSe o número máximo de descartes for atingido durante a maturação. Verifique o valor do raio definido e considere reduzi-lo.

predict

def predict(self, X: Union[npt.NDArray, list]) -> npt.NDArray:
...

Prever as classes com base nos detectores gerados após o treinamento.

Parâmetros

NomeTipoPadrãoDescrição
XUnion[npt.NDArray, list]-Amostras de entrada. Deve ter o mesmo número de características usadas no treinamento.

Returns

TipoDescrição
npt.NDArrayArray C (n_samples), contendo as classes prevista para X.

Exceções

ExceçãoDescrição
TypeErrorSe X não for ndarray ou list.
ValueErrorSe X possuir valores diferentes de (0 e 1) ou (True e False).
FeatureDimensionMismatchSe o número de característica (colunas) em X não corresponder ao valor esperado.
ModelNotFittedErrorSe o modelo ainda não tiver sido treinado e não possuir detectores ou classes definidas.

Exemplos Estendidos

Exemplos completos de uso estão disponíveis nos notebooks Jupyter:


Referências

Footnotes

  1. S. Forrest, A. S. Perelson, L. Allen and R. Cherukuri, "Self-nonself discrimination in a computer," Proceedings of 1994 IEEE Computer Society Symposium on Research in Security and Privacy, Oakland, CA, USA, 1994, pp. 202-212, doi: https://dx.doi.org/10.1109/RISP.1994.296580.