Algunos trucos



Algunos trucos

0 0


trucos-slides


On Github rafacarrascosa / trucos-slides

Algunos trucos

del prácticante de machine learning

Rafael Carrascosa - Encuentro Data Science Cordoba

Outline

  • Trucos de hashing
  • Reservoir sampling
  • Features heterogeneos
  • Clasificación con muchas clases
  • Cierre y preguntas
El formato de la charla un repaso de un popurri de trucos heterogeneos. Mi intención es predicar sobre la existencia de técnicas buenas, útils y que se usan poco, sin entrar en detalle. Para profundizar hay mucho más y de mejor calidad en la web. Me sirve para dar la charla que me interrumpan con preguntas y comentarios.

Bloom filter

Estructura de datos que representa un conjunto y tiene:

  • Tiempo de insercion constante
  • Tiempo de query constante
  • Uso de memoria constante

Catch: Hay una probabilidad pequeña de que la query de un falso positivo.

Definitely not there.
Key: Add a Credit to Jason Davies El tamaño de la tabla y la cantidad de funciones de hash regulan la probabilidad de falso positivo.

Count min-sketch

Estructura de datos para conteo de frecuencia que tiene:

  • Tiempo de insercion constante
  • Tiempo de query constante
  • Uso de memoria constante

Similar a bloom filter, pero con conteo. Muy util para estimar probabilidades en streams de cosas.

Link a Wikipedia.

Es un esquema similar al de bloom filters, pero en vez de tener un array de bits tiene un array de enteros que se incrementa con cada inserción. A la hora de hacer una query se computa el valor mínimo de las partes del array seleccionadas por la función de hash.

Hashing vectorizer

Bag of words

La casa verde      --> 00010001100
El auto verde      --> 01000000101
El auto de la casa --> 01010101001

Tradicionalmente esto requiere un diccionario de label a indices.

Un hashing vectorizer reemplaza este diccionario con un hash que va de label a indices.

Pros: Memoria constante, no requiere entrenamiento.

Cons: Puede haber colisiones

Hay riesgo de colision pero el vectorizador no necesita entrenarse ni consume memoria. Es stateless.

Locality sensitive hashing

Problema: Encontrar pares de objetos similares en una bolsa grande.

Caso real: Usuarios de telefono celular duplicados.

Como ejemplo voy a comentar una sola técnica para esto: Random projection, pero hay todo una rama de estudio sobre este tema que se llama Locality sensitive hashing.

Conoci alguien al que le paso esto: Una empresa de telefonia quiere saber cuales números de telefonos celulares son "duplicados", ie: Son usados por la misma persona. La dificultad: Hay 60 millones de números de celular entregados, todos contra todos no va ni a gancho. Tambien se puede pensar como una forma de reducción de dimensionalidad donde los features son binarios.

Random projection

image credit link

Reservoir sampling

Meta: Tomar una muestra aleatoria de un stream de datos que no entra en memoria y cuya longitud es desconocida.

Existe un algoritmo para esto que se llama Reservoir sampling

Llenar un reservorio de K elementos y por cada elemento nuevo usar un número aleatorio para decidir si entra (reemplazando a otro) dentro del resevorio. En todo momento el reservorio tiene la muestra aleatoria. Se puede analizar como una recursion. Si se implementa correctamente el output es una muestra aleatoria barajada aleatoriamente.

Features heterogeneos: SVD / PCA

Problema: Tengo 1 feature rico (1 columna) y 1 feature ralo (100000 columnas) ¿Como los uso juntos?

Caso de estudio: Supermercado. Predecir si un cliente va a comprar un producto.

Approach: Usar reducción de dimensionalidad en el feature ralo y concatenarlo con el feature rico.

SVD y PCA son métodos de reducción de dimensionalidad no supervisados.

- Feature rico: Cuantas veces el cliente compró el producto antes. - Feature ralo: Palabras en el título/descripción del producto.

Features heterogeneos: Densificar con clasificador

Mismo problema, mismo approach, distinta reducción de dimensionalidad.

Entrenar un clasificador usando solo el feature ralo y concatenar su función de decision con el feature rico.

A esta técnica le dicen Stacking.

En vez de usar un algoritmos no supervisado usar la función de decisión de un clasificador como una método supervisado de reducción de dimensionalidad. En mi experiencia personal esto da muy buenos resultados.

Clasificación con muchas clases

a

Cuando hay muchas clases vale la pena probar:

  • Usar un clasificador nativo multiclase.
  • Jerárquico
  • Esquema generativo-ish
El baseline no informado es 1/10000 de accuracy, hay que remarla de abajo. Tiempos de entrenamiento puede explotar mal. OneVsOne o OneVsRest No hay silver bullet.

Jerárquico

Requiere entrenar M clasificadores, pero con menos data. Credito imagen. El arbol de clases puede estar dado por el problema o ser inducido.

Esquema generativo-ish

En vez de entrenar un clasificador \[ f(features) \rightarrow category \]

Entrenar un clasificador \[ f(features, category) \rightarrow \{ 0 , 1 \} \]

a

Pros: Entrenamiento crece, features compactos

Cons: Computacionalmente caro, requiere cuidado

En mi experiencia siempre requirio mucho cuidado llevar el problema a esta forma y existe un riesgo de que no de mejor performance que con el esquema vainilla.

Cierre y preguntas

Algunos trucos del prácticante de machine learning Rafael Carrascosa - Encuentro Data Science Cordoba http://rafacarrascosa.github.io/trucos-slides