Sesión 7. Dask Y HDFS

Tarea 4: Detección de códigos QR maliciosos

Con un modelo de redes neuronales implementado en Keras y empleando la librería Dask, el cual supere o iguale el 95% de exactitud en el conjunto de test, se debe realizar el proceso de clasificación de los códigos QR incluidos en el conjunto de datos ubicado en la ruta:

  • PATH="hdfs://132.248.172.201:9820/datasets/qrcodes_parquet_small/"

El conjunto se encuentra almacenado en el HDFS mediante el formato de archivo Parquet, mismo que puede ser leído con el código Python siguiente (utilizando las facilidades que proporciona la librería Dask):

  • ddf = (dd.read_parquet(PATH, engine='pyarrow').repartition(partition_size="100MB").persist())

El conjunto consiste en un dataframe de 200,000 muestras correspondientes a los pixeles de imágenes que codifican URLs existentes en Internet, siendo 100,000 URLs maliciosos y 100,000 URLs benignos.

El formato de las columnas del dataframe es el siguiente (resultado de la instrucción ddf.dtypes):

  • pixel0    int8
  • pixel1    int8
  • pixel2    int8
  • pixel3    int8
  • pixel4    int8
  •  ...
  • pixel15125    int8
  • pixel15126    int8
  • pixel15127    int8
  • pixel15128    int8
  • malicious      int8
  • Length: 15130...

Y del comando ddf.info(memory_usage="deep"):

<class 'dask_expr.DataFrame'>
Columns: 15130 entries, pixel0 to malicious
dtypes: int8(15130)
memory usage: 2.8 GB

Las imágenes de los códigos QR presentan un tamaño de 123 por 123 pixeles (esto es 15,129 pixeles en total), con valores exclusivamente de 0 o 1, según corresponda al color negro o blanco del pixel (lo cual corresponden a la misma cantidad de columnas del dataframe). Además, la columna malicious presenta un valor de 1 si el código QR corresponde a un URL malicioso o, de lo contrario, el valor 0.

El problema de clasificación es binario, con un conjunto de datos balanceado y cuyo objetivo es detectar los códigos maliciosos e igualar o superar una exactitud (accuracy) del 95% sobre el conjunto de test (train: 70%; test: 30%).

+---+---+---+---+

Para la aleatorización del conjunto de entrenamiento COMPLETO utilicen el código siguiente:

X.compute_chunk_sizes()
y.compute_chunk_sizes()

import numpy as np
from dask.array.slicing import shuffle_slice

np.random.seed(42)

X_len = X.shape[0]
index = np.random.choice(X_len, X_len, replace=False)

X_rand = shuffle_slice(X, index)
y_rand = shuffle_slice(y, index)

X_rand.compute()
y_rand.compute()

+---+---+---+---+

Information on the Original Dataset:

https://www.kaggle.com/datasets/samahsadiq/benign-and-malicious-qr-codes?resource=download

  • This dataset is created using Python code to generate QR codes from the REAL list of URLs provided in the following dataset from Kaggle: [https://www.kaggle.com/datasets/samahsadiq/benign-and-malicious-urls](https://www.kaggle.com/datasets/samahsadiq/benign-and-malicious-urls).
  • The mentioned dataset consists of over 600,000 URLs. However, only the first 100,000 URLs from each class (_Benign_ and _Malicious_) are used to generate the QR codes. In total, there are 200,000 QR codes images in the dataset that encoded REAL URLs.
  • This dataset is a _Balanced Dataset_ of QR codes of version 2. The 100,000 benign QR codes were generated by a single loop in Python, and the same for the malicious QR codes.
  • The QR code images that belong to malicious URLs are under the _malicious_ folder with the word _malicious_ in their file name. On the other hand, the QR codes that belong to benign URLs are listed under the _benign_ folder with the word _benign_ in their filenames.

NOTE: Keep in mind that malicious QR codes encode REAL malicious URLs, it is not recommended to scan them manually and visiting their encoded websites.

  • For more information about the encoded URLs, please refer to the mentioned dataset above in Kaggle

Ver Video Sesión 7. DASK y HDFS para el ML/DL y Big Data

Ver Video Tarea 4. Dask y HDFS. Códigos QR maliciosos

 
 
Powered by Phoca Download