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

AiNet

Rede Imunológica Artificial (AiNet) para agrupamento e compressão.

Herança

Esta classe herda de BaseClusterer.

Módulo: aisp.ina
Importação: from aisp.ina import AiNet


Visão geral

Esta classe implementa o algoritmo AiNet é projetado para tarefas de agrupamento e compressão de dados; O algoritmo é inspirado na teoria da rede imunológica, seleção clonal e maturação por afinidade para reduzir conjuntos de dados com muitas amostras 1.
No agrupamento a classe utiliza a implementação da Scipy da Árvore geradora mínima para separa as arestas mais distantes em grupos de dados 2.


Exemplo

import numpy as np
from aisp.ina import AiNet

np.random.seed(1)
# Gerando dados de treinamento
a = np.random.uniform(high=0.4, size=(50, 2))
b = np.random.uniform(low=0.6, size=(50, 2))
x_train = np.vstack((a, b))
# Instância do AiNet
ai_net = AiNet(
N=150,
mst_inconsistency_factor=1,
seed=1,
affinity_threshold=0.85,
suppression_threshold=0.7
)
ai_net = ai_net.fit(x_train, verbose=True)
x_test = [
[0.15, 0.45], # Esperado: rótulo 0
[0.85, 0.65], # Esperado: rótulo 1
]
y_pred = ai_net.predict(x_test)
print(y_pred)

Output

[0 1]

Parâmetros do Construtor

NomeTipoDefaultDescrição
Nint50Número de células de memória (anticorpos) para iniciar a população.
n_cloneint10Número de clones gerados para cada célula de memória selecionada.
top_clonal_memory_sizeint5Número de anticorpos com maior afinidade que selecionados para a clonagem e mutação.
n_diversity_injectionint5Número de novas células de memória aleatórias que serão inseridas para manter a diversidade.
affinity_thresholdfloat0.5Limiar de afinidade (similaridade) parta determinar a supressão das células.
suppression_thresholdfloat0.5Limiar de supressão das células de memórias semelhantes.
mst_inconsistency_factorfloat2.0Fator usado para determinar quais arestas da Árvore Geradora Mínima (MST) são consideradas inconsistentes.
max_iterationsint10Número máximo de iterações de treinamento.
kint3Número de vizinhos mais próximos usados para predição de rótulos.
metricMetricType"euclidean"Métrica de distância utilizada para calcular a similaridade entre as células de memória.
seedOptional[int]NoneSeed para geração aleatória.
use_mst_clusteringboolTrueQuando True, realiza o agrupamento utilizando a MST. Se False, o agrupamento não é executado e o método predict lança uma exceção ModelNotFittedError.
pfloat2.0Parâmetro p utilizado na distância de Minkowski.

Atributos

NomeTipoPadrãoDescrição
memory_networkDict[int, List[Cell]]-Rede imunológica que representa os clusters.
population_antibodiesOptional[npt.NDArray]-População de anticorpos de memória.
mstdict-Árvore geradora minima com estatísticas (graph, mean_distance, std_distance).

Métodos Públicos

fit

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

Treina o modelo com os dados de entrada utilizando o algoritmo AiNet.

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.
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 não for um ndarray ou list.
UnsupportedTypeErrorSe o tipo das características em X não forem suportados.

predict

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

Prever os rótulos dos clusters para os dados de entrada.

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.NDArrayRótulos previstos para os dados de entrada.

Exceções

ExceçãoDescrição
TypeErrorSe X não for ndarray ou list.
ValueErrorSe X contiver valores diferentes de (0 e 1) ou (True e False), quando as características treinadas forem do tipo 'binary-features'
FeatureDimensionMismatchSe o número de dimensões em X não corresponder ao esperado.
ModelNotFittedErrorSe o modelo ainda não tiver sido treinado e não possuir o conjunto de células de memória.

update_clusters

def update_clusters(self, mst_inconsistency_factor: Optional[float] = None):
...

Agrupa os clusters com base no fator de inconsistência da MST.

Utiliza a Árvore Geradora Mínima (MST) criada a partir da população de anticorpos para redefinir os clusters. As arestas cujos pesos excedem a média somada ao valor de mst_inconsistency_factor multiplicado pelo desvio padrão dos pesos das arestas são removidas. Cada grafo conectado após essa poda é tratado como um grupo distinto.

Parâmetros

NomeTipoPadrãoDescrição
mst_inconsistency_factorfloatNoneSobrescrever o fator de inconsistência da MST.

Exceções

ExceçãoDescrição
ValueErrorSe a Árvore Geradora Mínima (MST) ainda não tiver sido criada.
ValueErrorSe a população de anticorpos estiver vazia.
ValueErrorSe as estatísticas da MST (média ou desvio padrão) não estiverem disponíveis.

Updates

NomeTipoDescrição
memory_networkdict[int, npt.NDArray]Dicionário de rótulos de clusters para vetores de anticorpos.
labelslistLista de rótulos de clusters.

Exemplos Estendidos

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


Referências

Footnotes

  1. De Castro, Leandro & José, Fernando & von Zuben, Antonio Augusto. (2001). aiNet: An Artificial Immune Network for Data Analysis. Available at: https://www.researchgate.net/publication/228378350_aiNet_An_Artificial_Immune_Network_for_Data_Analysis

  2. SciPy Documentation. Minimum Spanning Tree. https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csgraph.minimum_spanning_tree