Algoritmo – S3lab http://s3lab.deusto.es S3lab Security Blog Wed, 06 May 2020 12:51:35 +0000 es hourly 1 https://wordpress.org/?v=5.1.5 Medidas de calidad de algoritmos de clasificación http://s3lab.deusto.es/medidas-calidad-algoritmos-clasificacion/ Tue, 12 May 2015 09:55:00 +0000 http://s3lab.deusto.es/?p=3736 Precisión y cobertura son dos de las medidas más utilizadas para evaluar el comportamiento de un algoritmo de clasificación. Ambas miden lo bien que se ha comportado el algoritmo, pero desde un punto de vista diferente. En esta entrada daremos

The post Medidas de calidad de algoritmos de clasificación appeared first on S3lab.

]]>
Precisión y cobertura son dos de las medidas más utilizadas para evaluar el comportamiento de un algoritmo de clasificación. Ambas miden lo bien que se ha comportado el algoritmo, pero desde un punto de vista diferente. En esta entrada daremos una idea de estas medidas a partir de un ejemplo ilustrativo.

Un cirujano particular

Para explicar estas medidas me gusta usar como ejemplo a un cirujano (en el papel de algoritmo de clasificación) extrayendo células cancerígenas. Al finalizar la operación el cirujano habrá extraído las células cancerígenas y dejado en el cuerpo las no cancerígenas. Pero como la perfección es imposible, como en todos los ámbitos, es posible que el cirujano haya extraído ciertas células no debiera y que se haya dejado otras que debió extraer. En este supuesto, llamamos precisión al porcentaje de células cancerígenas de entre las células extraídas, y llamamos cobertura al porcentaje de células extraídas de entre las células cancerígenas.

Un poco trabalenguas, ¿no? En nuestro ejemplo, si el cáncer está localizado en un área vital, el cirujano extraerá sólo células cancerígenas y no se arriesgará a eliminar células sanas por temor a dañar la zona, con lo cual se dejará bastantes células cancerígenas. En este caso el cirujano tendrá alta precisión pero baja cobertura. Si por el contrario, la zona en la que está localizado el cáncer no es de riesgo, muy seguramente nuestro cirujano particular se arriesgará a extraer todas las células cancerígenas, llevándose con sí células sanas. En este caso, tendrá muy buena cobertura a costa de sacrificar la precisión.

Lo ideal sería un algoritmo con valores altos tanto de precisión y de cobertura, pero suele ser habitual, como en este ejemplo, que para ganar en una medida se suele tener que sacrificar la otra. Así, en general como medidas de calidad de algoritmo se suelen dar medidas que engloban el resultado de estas dos, como F1-score o el coeficiente de correlación de Matthews (o coeficiente phi).

AUCAUC – Área bajo la curva ROC

Pero de todas estas medidas que aglutinan precisión y cobertura, la que destaca por encima de todas, es el área bajo la curva ROC  (AUC, por sus siglas en inglés). Para explicar esta medida hemos de modificar sutilmente el ejemplo. Ahora no queremos evaluar la calidad del cirujano en una operación, sino que queremos evaluar la calidad de nuestro “cirujano configurable”. Configurable porque dependiendo de qué cáncer esté extirpando, se arriesgará más a extraer más células, o será más conservador. Aún así habrá mejores cirujanos que otros. La curva ROC representa los pares precisión-cobertura, codificados como ratios de verdaderos positivos y falsos positivos, según vamos variando la configuración. Una curva más alta indicará mejores valores de precisión a un mismo valor de cobertura. Así pues, AUC medirá el comportamiento global del cirujano en sus diferentes configuraciones.

The post Medidas de calidad de algoritmos de clasificación appeared first on S3lab.

]]>
Bloom Filter, un algoritmo como un juego de Hasbro http://s3lab.deusto.es/bloom-filter-algoritmo-juego-hasbro/ Tue, 24 Feb 2015 11:00:57 +0000 http://s3lab.deusto.es/?p=3352 Si habéis utilizado Cassandra, sabréis que se caracteriza por ser tremendamente rápida en las escrituras y lecturas, y esto se debe en parte a una estructura de datos denominada Bloom Filter. Bloom Filter es una manera extremadamente eficiente de preguntar

The post Bloom Filter, un algoritmo como un juego de Hasbro appeared first on S3lab.

]]>
Si habéis utilizado Cassandra, sabréis que se caracteriza por ser tremendamente rápida en las escrituras y lecturas, y esto se debe en parte a una estructura de datos denominada Bloom Filter.

Bloom Filter es una manera extremadamente eficiente de preguntar si un dato existe en un conjunto o no (lo cual utiliza Cassandra para evitar accesos a disco en vano, que es la parte más lenta del tinglado). ¿La pega? Es un algoritmo probabilista y puede haber falsos positivos (aunque nunca falsos negativos).

Funciona con dos elementos:

  • Un array de m bits, inicializado a a cero.
  • Un conjunto de k funciones hash que, dado un dato, generarán números entre 0 y m-1.

Cuando insertemos un dato lo pasaremos por las funciones hash, las cuales nos devolverán posiciones del array donde cambiaremos sus valores a 1. Así, cuando lleguen nuevas cadenas, para saber que seguro el elemento no existe en el conjunto, solamente debemos comprobar que alguna de las posiciones en el array generada por alguna de las funciones hash nos devuelve 0.

Para intentar enteder esto mejor vamos a hacerlo con un pequeño juego.

Imaginemos una partida de «¿Quién es quién?», pero con multiples sospechosos. El jugador A añade sospechosos, y el jugador B pregunta al jugador A en base a los atributos de los sospechosos. En este caso los sospechosos serán los datos, sus atributos serán las funciones hash, y la lista total de atributos que guarde el jugador A será el array de bits. Éstos serán nuestros sospechosos.

 

Hasbro-S3lab-es

Pongamos que el jugador A añade como sospechoso a Bill Gates. Eso significa que ahora el jugador A tiene como características «Rico», «Filántropo» y «Gafas». Por lo tanto, cuando el Jugador B pregunte por Steve Jobs, pese a que las propiedades de «Gafas» y «Rico» si que están, la de «Americano» no, así que puede estar seguro de que Steve Jobs no es uno de los sospechosos.

Pero, ¿qué pasa si ahora añadimos a Mark Zuckerberg? Al hacerlo, añadimos dos propiedades nuevas, por lo tanto ahora nuestra lista de características será la siguiente:

«Rico», «Filántropo», «Gafas», «Americano» y «Joven».

Así que, ahora, ¿qué pasa si preguntamos por Steve Jobs otra vez? Como todos sus atributos están en la lista, podríamos pensar que es uno de los sospechosos, pero no es el caso. Es decir, podemos estar seguros de cuándo alguien no es sospechoso, pero nunca de si lo es. Si insertamos a Steve Jobs nuestra lista no se alterará. ¿Qué pasa entonces si preguntamos por Stephen Hawking? Incluso con tres sospechosos ya metidos, como Stephen Hawking tiene dos atributos que aún no han sido insertados, podemos afirmar categóricamente que no está en la lista de sospechosos.

Y así funciona (muy por encima). Si queréis información en mayor profunidad, sobre cómo por ejemplo hacer para reducir el porcentaje de falsos positivos, o cómo lidiar con con borrados aquí tenéis una página interesante.

Why Bloom filters work the way they do

Y si os apetece jugar un poco con él, en esta web podréis encontrar diversas implementaciones en python, que os pueden ser útiles cuando queráis manejar grandes datos, como por ejemplo… datos del Titanic

Fast Non-Standard Data Structures for Python

The post Bloom Filter, un algoritmo como un juego de Hasbro appeared first on S3lab.

]]>