**IAIC** Fundamentos de ML # Introducción Grosso modo, el **Aprendizaje Automático** (AA, o **Machine Learning**, **ML**, por su nombre en inglés, más en uso que la traducción al español) es la rama de la Inteligencia Artificial que tiene como objetivo *desarrollar técnicas que permitan a las computadoras aprender*. De forma más concreta, se trata de *crear algoritmos capaces de generalizar comportamientos y reconocer patrones a partir de una información suministrada en forma de ejemplos*. Es, por lo tanto, un proceso de **inducción del conocimiento**, es decir, un método que busca obtener por generalización un enunciado general a partir de enunciados que describen casos particulares. Cuando se han observado todos los casos particulares la inducción se considera **completa**, por lo que la generalización a la que da lugar se considera **válida**. No obstante, en la mayoría de los casos es imposible obtener una inducción completa, por lo que el enunciado a que da lugar queda sometido a un cierto grado de incertidumbre y, en consecuencia, no se puede considerar como un esquema de inferencia formalmente válido ni se puede justificar empíricamente. En muchas ocasiones el campo de actuación del aprendizaje automático se solapa con el de **Data Mining**, ya que las dos disciplinas están enfocadas en el análisis de datos, sin embargo el aprendizaje automático se centra más en el estudio de la complejidad computacional de los problemas con la intención de hacerlos factibles desde el punto de vista práctico, no únicamente teórico. A un nivel muy básico, podríamos decir que una de las tareas del AA es intentar extraer conocimiento sobre algunas propiedades no observadas de un objeto basándose en las propiedades que sí han sido observadas de ese mismo objeto (o incluso de propiedades observadas en otros objetos similares)... o, en palabras más llanas, **predecir** comportamiento futuro a partir de lo que ha ocurrido en el pasado. Un ejemplo de mucha actualidad sería, por ejemplo, el de predecir si un determinado producto le va a gustar a un cliente basándonos en las valoraciones que ese mismo cliente ha hecho de otros productos que sí ha probado. ## Sobre el Aprendizaje En cualquier caso, como el tema del que estamos hablando está relacionado con el aprendizaje, lo primero que hemos de preguntarnos es **¿Qué entendemos por aprender?** y, ya que queremos dar metodologías generales para producir un aprendizaje de forma automática, una vez que fijemos este concepto habremos de dar métodos para medir el grado de éxito/fracaso de un aprendizaje. En cualquier caso, ya que estamos trasladando un concepto intuitivo y que usamos normalmente en la vida diaria a un contexto computacional, ha de tenerse en cuenta que todas las definiciones que demos de aprendizaje desde un punto de vista computacional, así como las diversas formas de medirlo, estarán íntimamente relacionadas con contextos muy concretos y posiblemente lejos de lo que intuitivamente, y de forma general, entendemos por aprendizaje. Una definición relativamente general de **aprendizaje** dentro del contexto humano podría ser la siguiente: !!!Def: Aprendizaje *Proceso a través del cual se adquieren o modifican habilidades, destrezas, conocimientos, conductas o valores como resultado del estudio, la experiencia, la instrucción, el razonamiento y la observación. * De esta definición es importante hacer notar que el aprendizaje debe producirse a partir de la experiencia con el entorno, no se considera aprendizaje toda aquella habilidad o conocimiento que sean innatos en el individuo o que se adquieran como resultado del crecimiento natural de éste. Siguiendo un esquema similar, en el AA vamos a considerar aprendizaje a aquello que la máquina pueda **aprender a partir de la experiencia**, no a partir del reconocimiento de patrones programados a priori. Por tanto, una tarea central de cómo aplicar esta definición al contexto de la computación va a consistir en alimentar la experiencia de la máquina por medio de objetos con los que entrenarse (**ejemplos**) para, posteriormente, aplicar los patrones que haya reconocido sobre otros objetos distintos (en un sistema de recomendación de productos, un ejemplo sería un par particular cliente/producto, junto con la información acerca de la valoración que aquel haya hecho de éste).  ### Primera Clasificación Hay un gran número de problemas que caen dentro de lo que llamamos **aprendizaje inductivo**. La principal diferencia entre ellos estriba en el tipo de objetos que intentan predecir. Algunas clases habituales son: * **Regresión**: Intentan predecir un valor real. Por ejemplo, predecir el valor de la bolsa mañana a partir del comportamiento de la bolsa que está almacenado (pasado). O predecir la nota de un alumno en el examen final basándose en las notas obtenidas en las diversas tareas realizadas durante el curso. * **Clasificación** (binaria o multiclase): Intentan predecir la clasificación de objetos sobre un conjunto de clases prefijadas. Por ejemplo, clasificar si una determinada noticia es de deportes, entretenimiento, política, etc. Si solo se permiten 2 posibles clases, entonces se llama **clasificación binaria**; si se permiten más de 2 clases, estamos hablando de **clasificación multiclase**. * **Ranking**: Intentar predecir el orden óptimo de un conjunto de objetos según un orden de relevancia predefinido. Por ejemplo, el orden en que un buscador devuelve recursos de internet como respuesta a una búsqueda de un usuario.  Normalmente, cuando se aborda un nuevo problema de AA lo primero que se hace es enmarcarlo dentro de alguna de las clases anteriores ya que, dependiendo de cómo se clasifique, será la forma en que podemos medir el error cometido entre la predicción y la realidad. En consecuencia, el problema de medir cómo de acertado es el aprendizaje obtenido deberá ser tratado para cada caso particular de metodología aplicada, aunque en general podemos adelantar que necesitaremos *embeber* la representación del problema en un espacio en el que tengamos definida una medida. ### Segunda Clasificación Por otra parte, y dependiendo del tipo de salida que se produzca y de cómo se aborde el tratamiento de los ejemplos, los diferentes algoritmos de AA se pueden agrupar en: * **Aprendizaje supervisado**: se genera una función que establece una correspondencia entre las entradas y las salidas deseadas del sistema, donde la base de conocimientos del sistema está formada por **ejemplos etiquetados** a priori (es decir, ejemplos de los que sabemos su clasificación correcta). Un ejemplo de este tipo de algoritmo es el problema de clasificación al que hemos hecho mención anteriormente. * **Aprendizaje no supervisado**: donde el proceso de modelado se lleva a cabo sobre un conjunto de ejemplos formados únicamente por entradas al sistema, sin conocer su clasificación correcta. Por lo que se busca que el sistema sea capaz de reconocer patrones para poder etiquetar las nuevas entradas. * **Aprendizaje semisupervisado**: es una combinación de los dos algoritmos anteriores, teniendo en cuenta ejemplos clasificados y no clasificados. * **Aprendizaje por refuerzo**: en este caso el algoritmo aprende observando el mundo que le rodea y con un continuo flujo de información en las dos direcciones (del mundo a la máquina, y de la máquina al mundo) realizando un proceso de ensayo-error, y reforzando aquellas acciones que reciben una respuesta positiva en el mundo. En este curso nos centraremos en las dos categorías más habituales, las de aprendizaje supervisado y no supervisado. # Aproximación Formal En el resto de este capítulo presentaremos el ML como una combinación de tres componentes: - **Datos** como colecciones de puntos de datos individuales que vienen dados por sus *caracterícticas* (*features*) y *etiquetas* (labels). - Un **Modelo** o **espacio de hipótesis** que consiste en aplicaciones (hipótesis) computacionalmente viables desde el espacio de características al espacio de etiquetas. - Una **Función de pérdida** para medir la calidad de una hipótesis. Un **problema/aplicación de ML** conlleva elegir todos los elementos anteriores. Las distintas clases que se pueden considerar respecto a estas elecciones es lo que denominamos **métodos de ML**, de los que veremos en temas posteriores. ## Los Datos Quizá el componente más importante de cualquier problema (y método) de ML sean los **datos**. !!!def: Datos Consideramos los datos como colecciones de unidades atómicas *contenedoras de información*. Un dato puede representar un único documento de texto, o un conjunto de documentos, una serie temporal generada por un sensor, o el conjunto de series temporales completas generadas por colecciones de sensores, un fotograma dentro de un único vídeo, escenas de vídeo dentro de una base de datos de películas, etc. En este sentido, se utiliza el concepto de **dato** de forma muy abstracta y, por tanto, muy flexible, pudiendo representar tipos de objetos muy diferentes que se manipulan en contextos de aplicación fundamentalmente distintos. !!!note En general, la definición, descripción y estructura de los datos es una elección de diseño. La mayoría de los métodos de ML construyen estimaciones/predicciones sobre un conjunto de datos de referencia (lo que se denomina **entrenamiento**), y que se vuelven más precisas a medida que aumenta el número de datos utilizados y se itera sobre el proceso de optimización que muchas veces acompaña la construcción de una estimación. Por ello, un parámetro clave de un conjunto de datos es el número de datos que contiene, lo que se llama el **tamaño de la muestra**. Aunque estadísticamente, cuanto mayor sea el tamaño de la muestra, mejor será el resultado, puede haber restricciones en los recursos informáticos (como el tamaño de la memoria) que limitan el tamaño máximo de la muestra que se puede procesar. Es útil distinguir entre dos grupos diferentes de elementos en la estructura de un dato, que extenderemos en las subsecciones siguientes: * **Características**, también denominadas *variables de entrada*. * **Etiquetas**, también denominadas **objetivo** o **variable de salida**. La distinción entre características y etiquetas es algo borrosa. La misma propiedad de un dato puede utilizarse como característica en una aplicación y como etiqueta en otra. Por ejemplo, en una base de datos ambientales (con información temporal sobre la presión atmosférica, temperatura, velocidad del viento, etc.) cada uno de esos elementos puede considerar como una característica para ayudar a predecir los demás, o como una etiqueta que queremos predecir a partir de los otros. ### Características Al igual que ocurre con la definición de los datos, la elección de qué se utilizará como características también es una decisión de diseño. En general, *las características son propiedades de un dato que pueden calcularse o medirse fácilmente o, simplemente, la información a la que tenemos acceso directo*. Sin embargo, se trata de una caracterización muy informal, ya que no existe un criterio universal para medir esta dificultad. Por ello, la tarea de elegir qué utilizar como características puede ser la parte más delicada de la aplicación de los métodos de ML, donde hace falta un conocimiento experto del dominio de aplicación que ayude a tomar decisiones acerca de qué considerar y qué no. En algunos dominios de aplicación existe una elección bastante natural para las características de un dato. Por ejemplo, para datos que representan imágenes parece natural utilizar los niveles de intensidad del color (rojo, verde y azul) de cada uno de los píxeles como características. Y también una elección de qué información no parece ser relevante, por ejemplo, el nombre de la persona que tomó la imagen (aunque nos podríamos sorprender de encontrar relaciones inesperadas entre hechos aparentemente desconectados). Junto al tamaño de la muestra (número de datos individuales en la muestra), $m$, también se considera el número de características que se utilizan para describir cada dato individual, $n$. El comportamiento de los métodos ML suele depender crucialmente de la relación entre estas dos cantidades: *su rendimiento suele mejorar al aumentar $m/n$*. Como regla general, deberíamos utilizar conjuntos de datos para los que $m/n ≫ 1$. Muchos dominios importantes de aplicación de ML generan datos que se caracterizan por varias cantidades numéricas $x_1, \dots, x_n \in \mathbb{R}$ (la mayoría de los métodos de ML trabajan con valores numéricos reales, por lo que hay procedimientos estandarizados para convertir características no numéricas en características numéricas). Cada dato se caracteriza entonces por su vector de características $\mathbb{x}\in X\subseteq \mathbb{R}^n$, donde a $X$ se le denomina **espacio de características**. Una de las razones por las que se consideran vectores de un espacio euclídeo es que éstos tienen una rica estructura geométrica y algebraica que podemos aprovechar (operaciones internas entre vectores, externas con escalares, operaciones paralelizables por medio de matrices, algoritmos muy depurados, etc.). A primera vista, podría parecer que *cuantas más características, mejor*, ya que el uso de más características podría transmitir más información relevante para lograr el objetivo general. Sin embargo, veremos que puede ser perjudicial para el rendimiento de los métodos de ML utilizar una cantidad excesiva de características (sobre todo, si son irrelevantes). Desde el punto de vista computacional, el uso de demasiadas características puede dar lugar a requisitos de recursos computacionales prohibitivos (como el tiempo de procesamiento). Desde el punto de vista estadístico, cada característica adicional suele introducir una cantidad adicional de ruido (debido a errores de medición o modelización) que es perjudicial para la precisión del método ML. Además, como es conveniente que $m/n ≫ 1$, incrementar en exceso $n$ nos obliga a adquirir muchos más datos. Así pues, se debe mantener un equilibrio entre un número de características suficiente como para enriquecer la información del dato, y un número no tan grande como para introducir ruido u obligarnos a adquirir demasiados datos. Además, se debe tener en cuenta algo más: !!!note La adquisición de datos (etiquetados) puede resultar costosa y requerir el trabajo de expertos humanos. ### Etiquetas Además de sus características, un dato puede tener otro tipo de propiedades que pueden representar una información de nivel superior o una cantidad de interés asociada al dato, que se denominan **etiqueta** (o **salida** u **objetivo**) y que, siguiendo la notación funcional habitual, suele denotarse por $y$. El conjunto de todos los posibles valores de etiqueta de los datos que surgen en una aplicación de ML se denomina **espacio de etiquetas**, $Y$. En general, determinar la etiqueta de un dato es más difícil (de automatizar) que determinar sus características. Muchos métodos de ML giran en torno a la búsqueda de formas eficientes de predecir (estimar o aproximar) la etiqueta de un dato basándose únicamente en sus características. !!!note Obsérvese que en la diferenciación entre características y etiquetas introducimos una suposición muy fuerte: que hay una dependencia funcional entre ellas, concretamente, que a partir de las características podemos calcular la etiqueta. De nuevo, para obtener métodos de ML eficientes, debemos explotar nuestro conocimiento de la estructura de $Y$. Los ejemplos más habituales que encontramos son: * $Y = \mathbb{R}$. En este caso, los métodos de ML se denominan métodos de **regresión**. * $Y=\{c_1,\dots,c_k\}$, un conjunto finito que indica la categoría o clase a la que pertenecen los datos. En este caso, los métodos de ML se denominan métodos de **clasificación**: * si $|Y|=2$ se denomina problema de **clasificación binaria**, como $Y=\{0, 1\}$, $Y=\{-1, 1\}$, o $Y=\{Sí, No\}$. * Si $|Y|>2$ de denomina problema de **clasificación multiclase**. * Si $Y=\{1,\dots,k\}$ se dice que usa **etiquetas ordinales**, algo intermedio entre las etiquetas numéricas y las categóricas (es una cantidad finita, pero hay cierto orden y similitud entre etiquetas según este orden). * También hay aplicaciones en las que los datos pueden pertenecer a varias categorías simultáneamente, es lo que se denomina **clasificación multietiqueta** (es decir, que realmente $Y=\cal{P}(\{c_1,\dots, c_k\})$). De nuevo, la distinción entre los problemas y métodos de regresión y clasificación es algo borrosa, ya que podemos pasar de regresión a clasificación por medio de un proceso de discretización (por ejemplo, por medio de umbrales), y de clasificación a regresión considerando la confianza que se tiene en la respuesta. !!!def Consideramos que un dato está etiquetado si, además de sus características, $\mathbb{x}$, se conoce el valor de su etiqueta, $y$. En este caso, suele escribirse el dato como el par $(\mathbb{x},y)$. Se puede considerar un caso extremo, donde no conocemos la etiqueta de ningún dato. Incluso en ausencia de datos etiquetados, los métodos de ML pueden ser útiles para extraer información relevante sólo de las características. En este caso, se dice que los métodos de ML son **no supervisados**. ### Modelos probabilísticos de datos Una de las ideas más fructíferas que ha habido en el desarrollo de los fundamentos del ML ha sido la de interpretar cada dato como la realización de una variable aleatoria. Para introducir esta idea vamos a considerar que los datos vienen descritos por una única característica $x$, aunque todo lo que vamos a hacer es fácilmente extendible a considerar datos con un vector de características y etiquetas. El modelo probabilístico más sencillo presupone que los distintos datos de la muestra se corresponden con **variables aleatorias independientes e identicamente distribuidas** (**i.i.d.**) siguiendo la misma distribución de probabilidad, $p(x)$. La distribución de probabilidad, $p(x)$, subyacente a los datos dentro de la hipótesis i.i.d. se conoce (basándose en algún conocimiento del dominio) o se estima a partir de los datos. A menudo basta con estimar sólo algunos parámetros de la distribución $p(x)$. El principio que se sigue se denomina **principio de máxima verosimilitud** y su objetivo es encontrar (los parámetros de) una distribución de probabilidad $p(x)$ que maximice la probabilidad de observar realmente los datos disponibles, es decir, cuál sería la distribución de probabilidad que tiene más opciones de generar los datos que tenemos. Dos de los parámetros más básicos y utilizados de una distribución de probabilidad $p(x)$ son el **valor esperado** y la **varianza**: $$μ_X = E[X] = \int_x x\ p(x)\ dx\quad, \quad σ^2_X = E[(X − E[X])^2]$$ Estos parámetros pueden estimarse en la práctica, incluso sin conocer $p$, utilizando la **media** (promedio) y la **varianza** de la muestra: $$\hat{μ}_X = \frac{1}{m} \sum_{i=1}^m x^i\quad , \quad \hat{σ^2_X} = \frac{1}{m} \sum_{i=1}^m (x^i − \hat{μ}_X)^2$$ Por ejemplo, si solo usamos estos indicadores, se sabe que la media y la varianza muestrales son los estimadores de máxima verosimilitud para la media y la varianza de una distribución normal (gaussiana). La mayoría de los métodos de ML que se estudian de forma habitual están motivados por el supuesto i.i.d., pero es importante señalar que esta suposición no es más que una suposición de modelización, no hay forma de verificar si un conjunto arbitrario de datos son *en realidad* realizaciones de variables aleatorias i.i.d. (aunque sí hay métodos estadísticos basados en pruebas de hipótesis para determinar si pueden aproximarse bien como realizaciones de variables aleatorias i.i.d). ## El modelo !!!def: Principio del ML El principio informal de la mayoría de los métodos ML es aprender una **hipótesis** $h : X → Y$ tal que $$y ≈ h(x),\ ∀ x∈ X$$ (el ideal sería $y=h(x),\ \forall x\in X$) Para conseguir este objetivo, en primer lugar necesitamos cuantificar el error de aproximación que comete una hipótesis $h$ dada. En segundo lugar, necesitamos precisar qué queremos decir realmente al exigir que la aproximación anterior se cumpla para *cualquier* dato (ya que, a priori, solo disponemos de un conjunto finito de datos de muestra). Si encontramos una hipótesis razonable $h$ que aproxima nuestros datos, podemos entonces utilizarla para predecir la etiqueta de cualquier dato del que conozcamos sus características (sin etiqueta), por lo que parece natural referirse a una hipótesis como un **predictor** de la etiqueta. Para los problemas de ML que utilizan un espacio de etiquetas finito $Y$ (por ejemplo, $Y = \{-1, 1\}$), las hipótesis también se llaman **clasificadores**, y en este caso $h$ se puede caracterizar utilizando sus diferentes **regiones de decisión**: $$R(c) = h^{-1}(c) = \{x ∈ \mathbb{R}^n : h(x) = c\} ⊆ X,\ ∀ c∈ Y$$ El conjunto de todas las posibles aplicaciones desde el espacio de características $X$ hasta el espacio de etiquetas $Y$, que se denota matemáticamente como $Y^X$, es donde, en principio, deberíamos buscar nuestra mejor hipótesis, pero en general este espacio es demasiado grande para que se pueda buscar en él con métodos prácticos. En comparación, los métodos prácticos de ML sólo pueden buscar y evaluar un subconjunto (minúsculo) de todas las hipótesis posibles, $H⊆ Y^X$, que se denomina **espacio de hipótesis** o **modelo subyacente** a un método ML. !!!note De forma similar a las características y etiquetas utilizadas para caracterizar los datos, también el espacio de hipótesis subyacente a un método ML es una elección de diseño, e implica un compromiso entre la complejidad computacional y las propiedades estadísticas de los métodos de ML resultantes. La preferencia por un espacio de hipótesis concreto depende a menudo de la infraestructura computacional disponible para un método de ML, otras al gusto del diseñador... y otras muchas al desconocimiento de otras opciones más adecuadas. Diferentes infraestructuras computacionales favorecen diferentes espacios de hipótesis. Por ejemplo, los métodos de ML implementados en un pequeño sistema integrado (una pulsera de actividades, por ejemplo) pueden optar por un espacio de hipótesis lineal que dé lugar a algoritmos que requieran un pequeño número de operaciones aritméticas, mientras que un entorno de computación en nube puede utilizar espacios de hipótesis mucho mayores obtenidos a partir de, por ejemplo, redes neuronales profundas. En términos generales, la elección del espacio de hipótesis $H$ de un método ML tiene que equilibrar dos requisitos contradictorios: - Tiene que ser lo suficientemente grande como para contener al menos una hipótesis predictora precisa $h^* ∈ H$. Si $H$ es demasiado pequeño podría no incluir $h^*$. En este caso, decimos que el método ML está **infraajustado**. - Tiene que ser lo suficientemente pequeño como para que su procesamiento se ajuste a los recursos computacionales disponibles (memoria, ancho de banda, tiempo de procesamiento). Debemos ser capaces de buscar eficientemente en el espacio de hipótesis para encontrar buenos predictores. Este requisito implica también que las hipótesis de $H$ puedan evaluarse (calcularse) de forma eficiente. Otra razón importante para utilizar un espacio de hipótesis que no sea demasiado grande es evitar el **sobreajuste**: si $H$ es demasiado grande, podríamos encontrar por casualidad una hipótesis que prediga (casi) perfectamente las etiquetas de los datos de un conjunto de entrenamiento que se utiliza para aprender una hipótesis, pero que podría ofrecer predicciones pobres para datos fuera del conjunto de entrenamiento. En este caso, decimos también que la **hipótesis no generaliza bien**. ### Espacios de hipótesis parametrizados Una amplia gama de dispositivos computacionales actuales (como las GPUs) disponen de herramientas (sotware y hardware) que ofrecen capacidades de álgebra lineal numérica eficiente, procesando datos en forma de matrices numéricas (vectores, matrices o tensores, que son una generalización de las matrices). Para aprovechar esta infraestructura computacional, muchos métodos de ML utilizan las aplicaciones lineales como espacio de hipótesis: $$H^{(n)} =\{h_W :\mathbb{R}^n → \mathbb{R}:\ h_W(x)= W x,\ W ∈ \mathbb{R}^n\}$$ En este caso, los elementos del espacio de hipótesis $H$ están parametrizados por el vector de pesos $W ∈ \mathbb{R}^n$, lo que permite procesar y manipular hipótesis mediante operaciones vectoriales (dejando la abstracción del espacio de hipótesis original). En particular, en lugar de buscar sobre el espacio de funciones $H$ para encontrar una buena hipótesis, podemos buscar sobre todos los posibles vectores de pesos $W ∈ \mathbb{R}^n$ que, aunque sigue siendo infinito (y no numerable), tiene una rica estructura geométrica y algebraica que nos permite buscar en su interior de forma efectiva. Además, como ya comentamos, este espacio también puede utilizarse para problemas de clasificación, por ejemplo, con el espacio de etiquetas $Y = \{-1, 1\}$, dado un mapa predictor lineal $h_W$, podemos clasificar los datos haciendo $h = sign \circ h_W$. Cuando la relación entre las características y la etiqueta es muy poco lineal y no es buena solución aproximarla por una lineal, hay que buscar espacios de hipótesis parametrizados que contengan aplicaciones no lineales. Uno muy común y que veremos más adelante son las **redes neuronales**. Pero además de considerar hipótesis no lineales hay un método alternativo que ha funcionado bien en muchos casos, y que consiste en una técnica sencilla pero potente para ampliar un espacio de hipótesis dado $H$ a un espacio mayor $H' ⊇ H$ que ofrezca una selección más amplia de hipótesis, pero sin sacrificar la fácil parametrización del espacio original. La idea es sustituir las características originales de un dato por nuevas características (transformadas) por medio de una función específica $\phi$ (denominada, en general, **función kernel**): $$H' =\{h'= h \circ \phi :\ h ∈ H\}$$ Esta construcción permite combinaciones arbitrarias entre las posibles funciones de transformación usadas, $\phi$, y el espacio de hipótesis *base*, $H$. El único requisito es que la salida de $\phi$ pueda utilizarse como entrada para los elementos de $H$ (es decir, $rang(\phi)\subseteq dom(h),\ \forall h\in H$). Entre los métodos ML que utilizan un espacio de hipótesis transformado encontramos la **regresión polinómica**, la **regresión de base gaussiana** y la importante familia de **métodos kernel** (de los que los anteriores son casos particulares). El espacio de hipótesis lineal sólo tiene sentido cuando las características de los datos son vectores numéricos, pero sería interesante poder hacer lo mismo para otros tipos de características no numéricas y poder aplicar toda la potencia que tienen los métodos basados en técnicas del álgebra lineal numérica. Por ejemplo, en el caso de los datos de texto, recientemente se han producido avances significativos en los métodos que mapean un texto generado por humanos en secuencias de vectores. Además, también existen métodos para generar características numéricas para datos que tienen una noción intrínseca de similitud. En general, estas técnicas se denominan **inmersiones**, o **embedding**. ### El tamaño de un espacio de hipótesis La noción de que un espacio de hipótesis es demasiado pequeño o demasiado grande puede precisarse de distintas maneras. El tamaño de un espacio de hipótesis finito $H$ puede definirse como su cardinalidad $|H|$ (el número de elementos que tiene). Por ejemplo, si tenemos datos representados por $100 × 100$ píxeles en blanco y negro y caracterizados por una etiqueta binaria que indica si la imagen es una letra o no, podemos modelar estos datos utilizando el espacio de características $X = \{0, 1\}^{10000}$ y el espacio de etiquetas $Y = \{0, 1\}$. El mayor espacio de hipótesis posible $H = Y^X$ consiste en todas las posibles aplicaciones de $X$ a $Y$, que tiene un tamaño $|H| = 2^{2^{10000}}$. Este caso tan sencillo es finito, aunque tremendamente grande. Muchos métodos de ML utilizan un espacio de hipótesis de tamaño infinito (como los espacios de hipótesis lineales que vimos en la sección anterior). El problema es que, para un espacio de hipótesis infinito, no podemos utilizar el número de sus elementos como medida de su tamaño, y hemos de medir su tamaño usando otras técnicas, como es la llamada **dimensión efectiva**. !!! def: Dimesión efectiva Consideremos un espacio de hipótesis $H$ formado por aplicaciones $h : X → Y$. Definimos la **dimensión efectiva** de $H$, $d_{eff}(H)$, como el número máximo $d ∈ \mathbb{N}$ tal que para cualquier conjunto $\{(x^1, y^1) , \dots, (x^d, y^d)\}$ de $d$ datos con características diferentes, siempre encontramos una hipótesis $h ∈ H$ que se ajusta perfectamente a las etiquetas, $y^{(i)} = h(x^i)$ para $i = 1, \dots , d$. De alguna forma, la dimensión efectiva mide la capacidad expresiva de $H$, su capacidad para diferenciar datos entre sí. Cuanto más complejo sea un problema, más intrincados estarán los datos que recojamos de él, y más difícil será diferenciarlos. !!!note La dimensión efectiva de un espacio de hipótesis está estrechamente relacionada con la llamada **dimensión de Vapnik-Chervonenkis** (**VC**), que es quizá el concepto más utilizado para medir el tamaño de los espacios de hipótesis infinitos. Sin embargo, la definición precisa de la dimensión VC está fuera del alcance de este curso y, para nuestros propósitos, ambas dimensiones se comportan de forma similar. Aunque no veremos la demostración de porqué es así, mostremos el valor de esta dimensión para dos ejemplos muy comunes: 1. La regresión lineal utiliza el espacio de hipótesis $$H^{(n)} = \{h : \mathbb{R}^n → \mathbb{R} :\ h(x) = W x \text{ para algún } W ∈ \mathbb{R}^n\}$$ En este caso, se puede probar que $d_{eff}(H)=n$. 2. En la regresión polinómica, $H^{(n)}_{poly}$ está formado por el conjunto de polinomios de grado máximo $n$. En este caso, se puede probar que también $d_{eff}(H)=n$. ## La función de pérdida (coste) Cada método de ML utiliza un espacio de hipótesis $H$ (más o menos explícito) que está formado por un conjunto de hipótesis computacionalmente viables. Pero, entre todas ellas, ¿cuál es la mejor para el problema de ML concreto que estemos resolviendo? Para responder a esta pregunta, los métodos de ML utilizan el concepto de **función de pérdida**. !!! def: Función de pérdida Formalmente, una función de pérdida es una aplicación $$L : X × Y × H → \mathbb{R}^+ : x, y , h → L((x, y), h)$$ que asigna a un par formado por un dato, con características $x$ y etiqueta $y$, y una hipótesis $h ∈ H$ el número real no negativo $L((x, y), h)$. El valor de pérdida $L((x, y), h)$ cuantifica la discrepancia entre la etiqueta verdadera, $y$, y la etiqueta predicha, $h(x)$. Un valor $L((x, y), h)$ pequeño (cercano a $0$) indica una discrepancia baja. A partir de las funciones de pérdida, el principio básico de los métodos de ML puede reformularse como: !!!def: Principio del ML Encontrar (aprender) una hipótesis de $H$ que provoque una pérdida mínima $L((x, y), h)$ para cualquier dato. !!!note Lo más importante de introducir una función de pérdida para dirigir el principio del ML es que hemos convertido una idea intuitiva en un problema de optimización, un área en la que se han dado muchos resultados en el último siglo. Al igual que todos los elementos anteriores, también la función de pérdida es una elección de diseño. La elección de esta función de pérdida debe seguir algunas consideraciones importantes: * Por ejemplo, si el método ML utiliza un espacio parametrizado, la función de pérdida se podrá expresar en función de este parámetro. Si la función de pérdida es una función convexa y diferenciable repecto del parámetro, entonces la búsqueda de una hipótesis con una pérdida pequeña se puede hacer de manera eficiente utilizando métodos basados en el gradiente. Si no es convexa o no es diferenciable, entonces este proceso suele ser mucho más difícil desde el **punto de vista computacional**. * La elección de $L$ también debería tener en cuenta **aspectos estadísticos**. Algunas funciones de pérdida dan lugar a métodos de ML más robustos frente a valores atípicos (malas mediciones, ruido, anormalidades,...). De nuevo, el principio de máxima verosimilitud de la inferencia estadística proporciona una construcción explícita de funciones de pérdida en términos de una distribución de probabilidad (supuesta) para los datos. * La elección de $L$ también puede verse influida por su **interpretabilidad**. Por ejemplo, cuando se trabaja en clasificación binaria, parece natural medir la calidad de una hipótesis por el número medio de datos clasificados erróneamente, que es precisamente la pérdida media $0/1$, que puede interpretarse como una tasa de clasificación errónea (o error). Sin embargo, utilizar la pérdida media $0/1$ para aprender una hipótesis precisa da lugar a problemas computacionalmente difíciles. Los aspectos anteriores (computación, estadística, interpretabilidad) suelen dar lugar a objetivos contrapuestos para la elección de una función de pérdida: * Una función de pérdida que tenga propiedades estadísticas favorables podría incurrir en una alta complejidad computacional del método ML resultante. * Las funciones de pérdida que dan lugar a métodos ML eficientes desde el punto de vista computacional pueden no permitir una interpretación sencilla, por lo tanto, puede ser útil utilizar diferentes funciones de pérdida para la búsqueda de una buena hipótesis y para su evaluación final. Por ejemplo, en un problema de clasificación binaria, podríamos utilizar la pérdida logística para buscar (aprender) una hipótesis precisa utilizando métodos eficientes basados en gradientes. Después de haber encontrado (aprendido) una hipótesis exacta, utilizamos la pérdida media $0/1$ para la evaluación final del rendimiento, que es atractiva para este propósito porque puede interpretarse como una tasa de error o clasificación errónea. ### Funciones de pérdida para etiquetas numéricas !!!def: Pérdida de error cuadrático Para los problemas de regresión ($Y\subseteq \mathbb{R}$ o $Y\subseteq \mathbb{R}^n$), una (primera) opción ampliamente utilizada para la función de pérdida puede ser la **pérdida de error cuadrático**: $$L((x, y), h) = (y − h(x))^2\quad, \quad L((x, y), h) = ||y − h(x)||^2$$ que depende de las características $x$ sólo a través del valor de $h(x)$ (y, por ello, en estos casos utilizaremos la abreviatura $L(y, h)$). Esta función de pérdida tiene propiedades computacionales y estadísticas atractivas. Para hipótesis lineales, $h_W(x) = W x$, la pérdida de error cuadrático es una función convexa y diferenciable de $W$, lo que permite buscar eficientemente la hipótesis lineal óptima utilizando métodos de optimización iterativos eficientes. Además, también tiene una interpretación útil en términos de un modelo probabilístico para las características y las etiquetas, ya que minimizar la pérdida de error cuadrático es equivalente a la estimación de máxima verosimilitud dentro de un modelo lineal gaussiano. Otra función de pérdida utilizada en problemas de regresión es la **pérdida de error absoluto**, $|h(x) - y|$, cuyo uso da lugar a métodos que son robustos frente a pocos valores atípicos en el conjunto de entrenamiento. Sin embargo, esta robustez se consigue a expensas de una mayor complejidad computacional al minimizar la pérdida de error absoluto (porque es no diferenciable). ### Funciones de pérdida para etiquetas categóricas Como ejemplo de funciones de pérdida para problemas de clasificación vamos a centrarnos en clasificación binaria. Además, sin pérdida de generalidad, asumimos que los valores de las etiquetas son $Y = \{-1, 1\}$ (cuidado, porque las funciones que veremos serán erróneas si se usan sobre otros espacios de etiquetas, y deben ser adaptadas). En principio, también podríamos medir la calidad de un clasificador con la pérdida de error cuadrático combinada con una discretización como vimos antes, pero resulta ser una mala medida de la calidad de una hipótesis debido a lo siguiente: en general, queremos que la función de pérdida castigue (con valores grandes) una hipótesis que tenga mucha confianza ($|h(x)|$ es grande) en una clasificación errónea, y no lo haga (con valores pequeños) con hipótesis muy confiadas ($|h(x)|$ es grande) en una clasificación correcta. Sin embargo, por su propia definición, la pérdida al cuadrado arroja valores grandes si la confianza $|h(x)|$ es grande, sin importar si la clasificación resultante es correcta o incorrecta. !!!tip Supongamos que en unas características concretas, $x$, el clasificador debería devolver $1$, y $h$, correctamente, devuelve $h(x)=1000$ (que en efecto, con el umbral, da como resultado $1$), sin embargo, el error cuadrático es del orden de $1000^2$; si devolviera $h(x)= -1$ estaría clasificando la etiqueta como $-1$ y sin embargo el error cuadrático sería de $4$, mucho menor a pesar de ser erróneo. Esto sugiere que es preferible aprender una hipótesis $h(x)$ minimizando la **pérdida $0/1$**: $$L((x, y), h) = \begin{cases} 1 & \text{, si } y \neq \hat{y}\\ 0 & \text{, en otro caso} \end{cases}$$ donde se supone que estamos usando el umbral discretizado para $h$: $$\begin{cases} \hat{y} = 1 & \text{, si } h(x) ≥ 0\\ \hat{y} = -1 & \text{, si } h(x) < 0 \end{cases}$$ Esta pérdida es conceptualmente atractiva cuando los datos se interpretan como realizaciones de variables aleatorias i.i.d. con la misma distribución de probabilidad $p(x, y)$ ya que, si tenemos $\{(x^i, y^i)\}_{i=1}^m$ muestreados a partir de variables aleatorias i.i.d., $$\frac{1}{m}\sum_{i=1}^m L((x^i, y^i), h) \approx p(y \neq \hat{y})$$ con alta probabilidad para un tamaño de muestra, $m$, suficientemente grande. Por ello, la pérdida $0/1$ parece una opción muy natural para evaluar la calidad de un clasificador si nuestro objetivo es hacer cumplir la clasificación correcta, pero tiene una alta complejidad computacional, ya que no es convexa ni diferenciable. Para evitar la no convexidad de la pérdida $0/1$, podemos aproximarla mediante una función de pérdida convexa, por ejemplo, la **pérdida bisagra**: $$L((x, y), h) = \max\{0, 1 − y · h(x)\}$$ que, es convexa, pero no diferenciable. En el caso particular de funciones de hipótesis lineales, se puede hacer uso de la **pérdida logística**, que es diferenciable y convexa: $$L((x, y), h) = \log(1 + e^{−yh(x)})$$ ### Funciones de pérdida para valores de etiqueta ordinales También hay funciones de pérdida especialmente adecuadas para predecir valores de etiquetas ordinales. Vamos a verlo sobre un ejemplo. Consideremos datos que representan imágenes reales tomadas desde satélite, a los que se asocia una etiqueta: - $y = 1$ si la zona no contiene árboles. - $y = 2$ si la zona está parcialmente cubierta de árboles. - $y = 3$ si la zona está totalmente cubierta de árboles. Así, podríamos decir que el valor de etiqueta $y = 2$ es *mayor* que el valor de etiqueta $y = 1$, y que el valor de etiqueta $y = 3$ es *mayor* que el valor de etiqueta $y = 2$. Luego, en este caso, podría ser útil tener en cuenta el orden de los valores de etiqueta al evaluar la calidad de las predicciones obtenidas por una hipótesis $h$. Supongamos que evaluamos un dato de la forma $(x,1)$ (es decir, que la etiqueta real es $y=1$), y dos hipótesis diferentes $h^a,\ h^b ∈ H$, donde $h^a(x) = 2$ y $h^b(x) = 3$. Ambas predicciones son erróneas, pero parece razonable considerar que la predicción de $h^a$ es menos errónea que la predicción de $h^b$. Sin embargo, la pérdida $0/1$ es la misma para $h^a$ y $h^b$ y, por tanto, no refleja nuestra preferencia por $h^a$. Tenemos que modificar (o adaptar) la pérdida $0/1$ para tener en cuenta el orden específico de las etiquetas. Para la aplicación anterior, por ejemplo, podríamos definir una función de pérdida mediante: $$L((x, y), h) = \begin{cases} 0 & \text{, si } y = h(x) \\ 10 & \text{, si } |y − h(x)| = 1 \\ 100 & \text{, en otro caso} \end{cases} $$ ### Riesgo empírico Como hemos comentado, la idea básica de los métodos de ML es encontrar (o aprender) una hipótesis (de un espacio de hipótesis dado, $H$) que incurra en una pérdida mínima cuando se aplique a datos arbitrarios (no con los que la hipótesis ha sido buscada). Para precisar este objetivo informal, debemos especificar qué entendemos por *dato arbitrario*, y como ya comentamos al principio del tema, uno de los enfoques más exitosos para definir esta noción son los modelos probabilísticos para los datos observados (los de entrenamiento). El modelo probabilístico más básico y utilizado interpreta los datos $(x^i, y^i)$ como realizaciones de variables aleatorias i.i.d. que siguen una distribución de probabilidad común $p(x, y)$. !!!def: Pérdida Esperada Tras asumir esta interpretación, parece natural medir la calidad de una hipótesis mediante la **pérdida esperada** (también conocido como **el riesgo de Bayes**): $$E\big[ L((x, y), h) \big] = \int_{X\times Y} L((x, y), h)\ dp(x, y)$$ Obsérvese que este cálculo requiere conocer la distribución de probabilidad conjunta $p(x, y)$ sobre el espacio $X\times Y$. !!!def: Estimador de Bayes Bajo esta suposición, el objetivo se convierte en aprender una hipótesis $h^∗$ que incurra en la mínima pérdida esperada: $$h^∗ = \text{argmin}_{h ∈ H} E\big[ L((x, y), h) \big]$$ Una hipótesis que resuelva esta ecuación se denomina **estimador de Bayes**. Aunque la pérdida esperada parece una medida de rendimiento razonable para una hipótesis $h$, no suele ocurrir que conozcamos la distribución de probabilidad $p(x, y)$ correcta e, incluso conociéndola, el principal reto computacional para aprender $h^*$ es la solución (numérica) eficiente de este problema de optimización. La ML más práctica se centra en los métodos que no requieren conocer $p(x, y)$, y el método más utilizado consiste en aproximar la pérdida esperada mediante una media empírica (muestral) sobre un conjunto finito de datos etiquetados: !!!def: Riesgo Empírico Definimos el **riesgo empírico** de una hipótesis $h ∈ H$ para un conjunto de datos $D =\{ (x^1, y^1) , \dots, (x^m, y^m)\}$ como: $$\hat{L}(h|D) = \frac{1}{m} \sum_{i=1}^m L((x^i, y^i), h)$$ Obsérvese que, en general, el riesgo empírico depende tanto de $h$ como de $D$. Si los datos utilizados para calcular el riesgo empírico se pueden modelizar como variables aleatorias i.i.d. cuya distribución común es $p(x, y)$, la **Ley de los grandes números** de la teoría de la probabilidad nos dicen que, para un tamaño de muestra $m$ suficientemente grande: $$E\big[ L((x, y), h) \big] ≈ \frac{1}{m} \sum_{i=1}^m L((x^i, y^i), h)$$ La mayoría de los métodos de ML están motivados por esta aproximación, que sugiere que una hipótesis con un riesgo empírico pequeño también dará lugar a una pérdida esperada pequeña. La pérdida esperada mínima posible se consigue con el estimador de Bayes, que podemos aproximar por medio de procesos empíricos. ### Matriz de Confusión, Curva ROC, y AUC Vamos a extender algunos conceptos para el caso de los problemas de clasificación. Sea entonces $D\subseteq X\times Y$ un conjunto de datos, donde $Y$ es un conjunto finito. Como hemos visto, podríamos medir la calidad de una hipótesis por la pérdida media $0/1$ incurrida en $D$. El problema es que si $D$ no tiene representación equilibrada de las distintas clases de $Y$, la hipótesis podría tener un rendimiento malo para los datos de una categoría minoritaria incluso aunque en media se comportara bien, y no podríamos saberlo usando solo lo que hemos visto. La matriz de confusión generaliza el concepto de pérdida $0/1$ a dominios con datos desequilibrados. En lugar de considerar únicamente la pérdida media $0/1$ sufrida por una hipótesis en un conjunto de datos $D$, utilizamos toda una familia de funciones de pérdida. En concreto, para cada par de valores de etiqueta $p, q ∈ Y$, definimos la pérdida: $$L^{(p→q)} ((x, y) , h) = \begin{cases} 1 & \text{, si } y = p \text{ y } h(x) = q \\ 0 & \text{, en caso contrario} \end{cases} $$ A continuación, calculamos la pérdida media sufrida en el conjunto de datos $D$, para $p, q ∈ Y$, como: $$\hat{L}^{(p→q)}(h|D) = \frac{1}{m}\sum_{i=1}^m L^{(p→q)} ((x^i, y^i), h)$$ Es conveniente ordenar los valores anteriores como una matriz que se denomina **matriz de confusión** (identificando previamente $Y=\{1,\dots,k\}$): $$\left( M_{pq} \right)= \left(\hat{L}^{(p→q)}(h|D)\right)$$  En el caso de la **clasificación binaria** (vamos a suponer que $Y=\{Yes,\ No\}$), esta matriz da lugar a un conjunto de definiciones que son muy comunes en el mundo del aprendizaje y que, conjuntamente, dan una información muy completa del funcionamiento del modelo (y, más importante, dónde falla para que podamos mejorarlo):  * **Accuracy**: Puede definirse como el porcentaje de predicciones correctas hechas por el modelo de clasificación. Es una buena métrica para usar cuando las clases están balanceadas, es decir, la proporción de instancias de todas las clases son similares. Sin embargo, no es una métrica fiable cuando los conjuntos de datos tienen un desbalanceo de clases, es decir, cuando el número total de instancias de una clase de datos es muy inferior al número total de instancias de otra clase de datos: $$Accuracy= \frac{TN+TP}{TN+TP+FN+FP}$$ * **Precision**: Indica, de todas las predicciones positivas, cuántas son realmente positivas. Se define como la relación entre las predicciones positivas correctas y las predicciones positivas generales: $$Precision=\frac{TP}{TP+FP}$$ * **TPR/Sensitivity/Recall**: Indica, de todos los valores realmente positivos, cuántos se predicen como positivos. Es la proporción de predicciones positivas correctas con respecto al número total de casos positivos en el conjunto de datos: $$TPR=Sensitivity=\frac{TP}{TP+FN}$$ * **Specificity**: Indica, de todos los valores realmente negativos, cuántos se predicen como negativos. Es la proporción de predicciones negativas correctas con respecto al número total de casos negativos en el conjunto de datos: $$Specificity=\frac{TN}{TN+FP}$$ * **FPR**: Suele ser útil trabajar con la opuesta de la Specificity, y se define como: $$FPR = 1 - Specificity = \frac{FP}{TN+FP}$$ Cuando las clases no están balanceadas es preferible usar **Precision** o **Sensitivity** en vez de **Accuracy**, pero es imposible aumentar ambas simultáneamente ya que son inversamente proporcionales entre sí. Por ello, dependiendo del problema, habrá que decidir cuál de ellas es más importante. En primer lugar, hay que decidir si es importante evitar los falsos positivos o los falsos negativos para el problema. La **Precision** se utiliza como métrica cuando el objetivo es minimizar los falsos positivos, y la **Sensitivity** se utiliza cuando el objetivo es minimizar los falsos negativos. Es esencial tomar esta decisión, porque se optimizará el rendimiento del modelo según la métrica seleccionada (y $h^*$ puede salir distinta). Cuando evitar tanto los falsos positivos como los falsos negativos es igualmente importante para el problema, se necesita un equilibrio entre **Precision** y **Sensitivity**, en este caso se puede usar la métrica **F1**, que se define como la media armónica entre estos valores: $$F1=\frac{2}{\frac{1}{TPR} + \frac{1}{FPR} } = \frac{TPR \times FPR}{TPR+FPR}$$ Se puede utilizar un modelo de clasificación para predecir directamente la clase real de los datos o, algo mucho más interesante, predecir su probabilidad de pertenecer a diferentes clases. Esto último da más control sobre el resultado, y se puede hacer uso de un umbral personalizado para interpretar el resultado del clasificador, algo que suele ser más prudente que construir un modelo completamente nuevo si el último ha fallado. Hay que tener presente que establecer diferentes umbrales para clasificar la clase positiva para los datos cambia la sensibilidad y la especificidad del modelo, dando resultados distintos para cada umbral considerado, y uno de estos umbrales probablemente dará un mejor resultado que los otros (este mejor dependerá de si estamos tratando de reducir el número de falsos negativos o de falsos positivos). A medida que las métricas cambian con los valores umbrales, podemos generar diferentes matrices de confusión y comparar las diversas métricas anteriores, pero eso no parece ser algo muy inteligente. En lugar de ello, lo que podemos hacer es generar una gráfica entre algunas de estas métricas de manera que podamos visualizar fácilmente qué umbral da un mejor resultado. La **curva AUC-ROC** viene para ayudar a resolver este problema. En **Teoría de Detección de Señales**, una **[curva ROC](https://es.wikipedia.org/wiki/Curva_ROC)** (acrónimo de **Receiver Operating Characteristic**, o **Característica Operativa del Receptor**) es una representación gráfica de la sensibilidad frente a la especificidad de un sistema clasificador binario según se varía el umbral de discriminación. El análisis de la curva ROC (o simplemente análisis ROC) proporciona herramientas para seleccionar los modelos posiblemente óptimos y descartar modelos subóptimos independientemente de (y antes de especificar) el coste de la distribución de las dos clases sobre las que se decide. Esta curva es también independiente de la distribución de las clases en la población, y se relaciona de forma directa y natural con el análisis de coste/beneficio en toma de decisiones diagnósticas. Aunque se desarrolló por ingenieros eléctricos para medir la eficacia en la detección de objetos enemigos en campos de batalla mediante pantallas de radar, se aplicó posteriormente en medicina, radiología, psicología y otras áreas durante varias décadas. Recientemente ha encontrado aplicación en áreas como ML y Data Science. El **área bajo la curva** (**AUC**) es la medida de la capacidad de un clasificador para distinguir entre clases y se utiliza como un resumen de la curva ROC. Cuanto más alta es la AUC, mejor es el rendimiento del modelo para distinguir entre las clases positivas y negativas: * Cuando $AUC = 1$, el clasificador es capaz de distinguir perfectamente entre todos los datos de la clase positiva y negativa. Sin embargo, si el AUC hubiera sido $0$, entonces el clasificador estaría prediciendo todos los Negativos como Positivos, y todos los Positivos como Negativos (algo fácilmente solucionable también). * Cuando $0,5 < AUC < 1$, hay una alta probabilidad de que el clasificador sea capaz de distinguir los valores de la clase positiva de los valores de la clase negativa, ya que es capaz de detectar más Verdaderos Positivos (TP) y Verdaderos Negativos (TN) que de Falsos Negativos (FN) y Falsos Positivos (FP). * Cuando $AUC=0,5$, entonces el clasificador no es capaz de distinguir entre los datos de la clase positiva y negativa. Lo que significa que el clasificador está prediciendo de forma aleatoria los datos.  En una curva ROC, un valor más alto del eje X indica un número mayor de falsos positivos que de verdaderos negativos. Mientras que un valor más alto del eje Y indica un número mayor de verdaderos positivos que de falsos negativos. Por lo tanto, la elección del umbral depende de la capacidad de equilibrio entre los falsos positivos y los falsos negativos. ### Uso de Referencias Expertas En algunas aplicaciones de ML podemos tener acceso a las predicciones obtenidas por algunos métodos de referencia (otros modelos) o expertos (humanos con un gran conocimiento del dominio). La calidad de una hipótesis $h$ se puede medir a través de la diferencia entre la pérdida sufrida por sus predicciones $h(x)$ y la pérdida sufrida por las predicciones de los expertos. Esta diferencia, que se denomina **arrepentimiento**, mide cuánto nos arrepentimos de haber utilizado la predicción $h(x)$ en lugar de utilizar la predicción del experto. El objetivo de la **minimización del arrepentimiento** es aprender una hipótesis con un arrepentimiento pequeño en comparación con todos los expertos considerados. El concepto de **minimización del arrepentimiento** es útil cuando no hacemos ninguna suposición probabilística sobre los datos.