Introducció

La detecció d'anomalies és un problema crucial en molts camps, com la seguretat, la detecció de fraus, la monitorització de sistemes, entre d'altres. Els autoencoders són una eina poderosa en Deep Learning per abordar aquest problema. En aquesta secció, explorarem com utilitzar autoencoders per detectar anomalies en dades.

Què és un Autoencoder?

Un autoencoder és un tipus de xarxa neuronal que s'entrena per copiar la seva entrada a la seva sortida. Consta de dues parts principals:

  • Codificador (Encoder): Redueix la dimensió de les dades d'entrada a una representació latent més petita.
  • Decodificador (Decoder): Reconstrueix les dades d'entrada a partir de la representació latent.

Estructura d'un Autoencoder

Entrada -> Codificador -> Representació Latent -> Decodificador -> Sortida

Exemple de codi d'un Autoencoder en Keras

import numpy as np
from keras.models import Model
from keras.layers import Input, Dense

# Dades d'exemple
x_train = np.random.random((1000, 20))
x_test = np.random.random((200, 20))

# Definició de l'autoencoder
input_dim = x_train.shape[1]
encoding_dim = 10  # Dimensió de la representació latent

input_layer = Input(shape=(input_dim,))
encoder = Dense(encoding_dim, activation="relu")(input_layer)
decoder = Dense(input_dim, activation="sigmoid")(encoder)

autoencoder = Model(inputs=input_layer, outputs=decoder)

# Compilació del model
autoencoder.compile(optimizer="adam", loss="mean_squared_error")

# Entrenament del model
autoencoder.fit(x_train, x_train, epochs=50, batch_size=32, shuffle=True, validation_data=(x_test, x_test))

Detecció d'Anomalies amb Autoencoders

Passos per a la Detecció d'Anomalies

  1. Entrenament de l'Autoencoder: Entrenar l'autoencoder amb dades normals (sense anomalies).
  2. Reconeixement de les Dades: Utilitzar l'autoencoder entrenat per reconstruir les dades de prova.
  3. Càlcul de l'Error de Reconstrucció: Calcular l'error entre les dades d'entrada i les dades reconstruïdes.
  4. Detecció d'Anomalies: Si l'error de reconstrucció és superior a un cert llindar, es considera una anomalia.

Exemple de codi per a la Detecció d'Anomalies

# Reconstrucció de les dades de prova
reconstructed_data = autoencoder.predict(x_test)

# Càlcul de l'error de reconstrucció
reconstruction_error = np.mean(np.square(x_test - reconstructed_data), axis=1)

# Definició del llindar per a la detecció d'anomalies
threshold = np.percentile(reconstruction_error, 95)

# Detecció d'anomalies
anomalies = reconstruction_error > threshold

print("Nombre d'anomalies detectades:", np.sum(anomalies))

Exercici Pràctic

Objectiu

Entrenar un autoencoder amb un conjunt de dades normal i utilitzar-lo per detectar anomalies en un conjunt de dades de prova.

Passos

  1. Preparació de les Dades: Utilitzar un conjunt de dades normal per entrenar l'autoencoder.
  2. Entrenament de l'Autoencoder: Entrenar l'autoencoder amb les dades normals.
  3. Reconeixement de les Dades de Prova: Utilitzar l'autoencoder per reconstruir les dades de prova.
  4. Càlcul de l'Error de Reconstrucció: Calcular l'error de reconstrucció per a cada mostra de les dades de prova.
  5. Detecció d'Anomalies: Determinar un llindar per a l'error de reconstrucció i identificar les anomalies.

Solució

import numpy as np
from keras.models import Model
from keras.layers import Input, Dense

# Dades d'exemple
x_train = np.random.random((1000, 20))
x_test = np.random.random((200, 20))

# Definició de l'autoencoder
input_dim = x_train.shape[1]
encoding_dim = 10  # Dimensió de la representació latent

input_layer = Input(shape=(input_dim,))
encoder = Dense(encoding_dim, activation="relu")(input_layer)
decoder = Dense(input_dim, activation="sigmoid")(encoder)

autoencoder = Model(inputs=input_layer, outputs=decoder)

# Compilació del model
autoencoder.compile(optimizer="adam", loss="mean_squared_error")

# Entrenament del model
autoencoder.fit(x_train, x_train, epochs=50, batch_size=32, shuffle=True, validation_data=(x_test, x_test))

# Reconstrucció de les dades de prova
reconstructed_data = autoencoder.predict(x_test)

# Càlcul de l'error de reconstrucció
reconstruction_error = np.mean(np.square(x_test - reconstructed_data), axis=1)

# Definició del llindar per a la detecció d'anomalies
threshold = np.percentile(reconstruction_error, 95)

# Detecció d'anomalies
anomalies = reconstruction_error > threshold

print("Nombre d'anomalies detectades:", np.sum(anomalies))

Conclusió

Els autoencoders són una eina potent per a la detecció d'anomalies gràcies a la seva capacitat per aprendre representacions latents de les dades. En aquest mòdul, hem après a entrenar un autoencoder i utilitzar-lo per detectar anomalies en un conjunt de dades. Aquesta tècnica es pot aplicar a una àmplia varietat de problemes en diferents camps.

© Copyright 2024. Tots els drets reservats