Herramientas de usuario

Herramientas del sitio


inteligencia_artificial:modelos_clasicos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
inteligencia_artificial:modelos_clasicos [2023/07/18 11:17] – [Margins] albertointeligencia_artificial:modelos_clasicos [2023/09/05 16:26] (actual) – [Naïve Bayes] alberto
Línea 76: Línea 76:
 //N(µ<sub>i</sub>, σ<sub>i</sub>)// significa que la distribución normal estará centrada en el valor medio, y con una extensión definida por σ a cada lado. No conocemos exactamente los valores µ y σ, pero podemos aproximarlos a partir de los datos de entrenamiento para cada clase. \\ //N(µ<sub>i</sub>, σ<sub>i</sub>)// significa que la distribución normal estará centrada en el valor medio, y con una extensión definida por σ a cada lado. No conocemos exactamente los valores µ y σ, pero podemos aproximarlos a partir de los datos de entrenamiento para cada clase. \\
  
-Si, por ejemplo, deseamos conocer la probabilidad de que //x<sub>3</sub>// de nuestro vector de características a clasificar, se encuentre dentro de la distribución normal correspondiente a la etiqueta //y=0//, usaríamos la [[https://es.wikipedia.org/wiki/Funci%C3%B3n_de_densidad_de_probabilidad|fórmula de densidad de probabilidad de una distribución normal]]fórmula de densidad de probabilidad de una distribución normal: {{ :ia:bayes5.png?200 |}} \\+Si, por ejemplo, deseamos conocer la probabilidad de que //x<sub>3</sub>// de nuestro vector de características a clasificar, se encuentre dentro de la distribución normal correspondiente a la etiqueta //y=0//, usaríamos la [[https://es.wikipedia.org/wiki/Funci%C3%B3n_de_densidad_de_probabilidad|fórmula de densidad de probabilidad de una distribución normal]]: {{ :ia:bayes5.png?200 |}} \\
 Hay que recordar que estamos haciendo 2 suposiciones: la independencia entre atributos, y la distribución normal de los valores de cada atributo. \\ Hay que recordar que estamos haciendo 2 suposiciones: la independencia entre atributos, y la distribución normal de los valores de cada atributo. \\
  
Línea 148: Línea 148:
 ==== Margins ==== ==== Margins ====
 Parta entender el concepto "márgenes", vamos a proponer un ejemplo. Vamos a suponer un dataset con vectores de atributos con 2 atributos (2 dimensiones), con 2 posibles clases a etiquetar, y que los representamos de la siguiente manera: {{ :ia:margins1.png?400 |}} \\ Parta entender el concepto "márgenes", vamos a proponer un ejemplo. Vamos a suponer un dataset con vectores de atributos con 2 atributos (2 dimensiones), con 2 posibles clases a etiquetar, y que los representamos de la siguiente manera: {{ :ia:margins1.png?400 |}} \\
-\\ 
  
 La clase 0 se representa con círculos, y la clase 1 con diamantes, en el eje X se representa el primer atributo y en el eje Y el segundo. \\ La clase 0 se representa con círculos, y la clase 1 con diamantes, en el eje X se representa el primer atributo y en el eje Y el segundo. \\
-\\ 
  
 Un clasificador puede ser ideado como un "plano" o "hiperplano" que separa el espacio de los datos de entrenamiento en función de su etiquetado. Este "plano" tendrá //n// - 1 dimensiones, siendo //n// el número de dimensiones de los vectores de atributos. \\ Un clasificador puede ser ideado como un "plano" o "hiperplano" que separa el espacio de los datos de entrenamiento en función de su etiquetado. Este "plano" tendrá //n// - 1 dimensiones, siendo //n// el número de dimensiones de los vectores de atributos. \\
Línea 157: Línea 155:
  
 Cuando tenemos que etiquetar un dato de entrada desconocido, según en el lado del hiperplano que quede, será etiquetado de una forma u otra. \\ Cuando tenemos que etiquetar un dato de entrada desconocido, según en el lado del hiperplano que quede, será etiquetado de una forma u otra. \\
-En este contexto, lo que que averiguar es dónde sitúo este hiperplano. Lo más lógico es pensar que el hiperplano debe encontrarse lo más alejado de todas las clases, tanto como le sea posible. Es decir, el hiperplano es el lugar de máximo __margen__, en nuestro caso, la línea que de lugar al mayor margen entre clases. Y localizar esta posición es el objetivo de toda SVM. +En este contexto, lo que que hay que averiguar es dónde situar este hiperplano. Lo más lógico es pensar que el hiperplano debe encontrarse lo más alejado de todas las clases, tanto como le sea posible. Es decir, el hiperplano es el lugar de máximo __margen__, en nuestro caso, la línea que de lugar al mayor margen entre clases. Y localizar esta posición es el objetivo de toda SVM. 
  
-\\ En nuestro ejemplo podemos visualizar la línea de separación de margen máximo (continua) y los márgenes máximos (discontinua):+En nuestro ejemplo podemos visualizar la línea de separación de margen máximo (continua) y los márgenes máximos (discontinua):
 {{ :ia:margins2.png?400 |}} {{ :ia:margins2.png?400 |}}
  
Línea 167: Línea 165:
  
 ==== Support vectors ==== ==== Support vectors ====
 +Los datos de entrenamiento que definen los márgenes, se dice que los "soportan". Estos puntos forman los "vectores de soporte" de los márgenes, y de ahí el nombre de "máquina de vectores de soporte" //support Vector Machine// (SVM).  \\
  
 +Usar los vectores de soporte para localizar la posición del margen, da lugar a un cálculo matemático muy complejo que no es objeto de estas notas. Pueden verse estas matemáticas en el artículo: "A Tutorial on Support Vector Machines for Pattern Recognition” by Christopher Burges (1998). \\
  
  
 ==== Optimization ==== ==== Optimization ====
 +Matemáticamente, podemos encontrar el hiperplano de margen máximo resolviendo un problema de optimización. En este tipo de problemas, dependemos de una serie de parámetros de los cuales debemos encontrar su valor. \\
  
 +En una SVM, la orientación del hiperplano viene definida por el vector **// ⃗w//**. Hay un offset **//b//** que debemos encontrar. Para hacer la condición de optimización más simple, cambiamos las clases 0 y 1, por -1 y +1.\\
 +
 +Matemáticamente queremos encontrar // ⃗w// y //b//, tal que la cantidad ½ ||// ⃗w//||<sup>2</sup> sea tan pequeña como sea posible, dado que //y<sub>i</sub>//(// ⃗w//·// ⃗x// - b) ≥ 1, para todas las etiquetas //y<sub>i</sub>// y los vectores //x<sub>i</sub>// del dataset. \\
 +Este tipo de problemas de optimización se resuelven a través de una técnica denominada "programación cuadrática" //quadratic programming//. De nuevo, no nos vamos a parar en las matemáticas, que incluyen la resolución de un Lagrangiano. No nos vamos a meter en el fango, no es lo nuestro. \\
 +
 +La formulación anterior sirve para el caso en que tengamos sólo 2 clases que puedan ser separadas por un hiperplano, y no siempre nos encontraremos en este caso. La forma completa del problema de optimización incluye un //fudge factor// **//C//** que afecta al tamaño del margen encontrado. \\
 +
 +El factor //C// no se averigua en el entrenamiento, si no que depende del problema y se le debe de asignar un valor para poder entrenar el modelo (por ejemplo con sklearn). Este tipo de parámetros, como //C// o //k// para //k//-NN, son denominados "hiperparámetros".
  
  
 ==== Kernels ==== ==== Kernels ====
 +Hay un concepto matemático más que debemos presentar. La descripción anterior es para una SVM lineal y usa los datos de entrenamiento directamente. \\
 +
 +En caso de que la SVM sea no lineal (es decir, los datos están mezclados y no se puede hacer mediante un hiperplano "recto"), usamos el "truco" del //kernel//. En este caso, los datos de entrenamiento se transforman a a otro espacio a través de una función Φ(⃗x), que produce una nueva versión del vector de datos de entrenamiento. Siendo  ⃗x los datos de entrenamiento clasificados '0', y ⃗z los datos de entrenamiento clasificados '1', el algoritmo SVM podría separar estos datos __de forma lineal__ (hiperplano "recto") a través de la expresión: ⃗x<sup>T</sup> ⃗z, es decir: Φ(⃗x)<sup>T</sup>Φ(⃗z).\\
 +
 +Esta expresión se denomina //kernel// (lineal) y se escribe: {{ :ia:kernels.png?200 |}} 
 +
 +Hay varios tipos de kernel, en función de la complejidad de la clasificación de los datos. Como por ejemplo el polinomial, que podemos decir "malamente" que en lugar de tener un hiperplano "recto", este va presentando "curvas" para adecuarse a la clasificación.\\
 +Un kernel muy común es el //Gaussian kernel//, también conocido como //Radial Basis Function (RBF)// kernel, que introduce un nuevo parámetro **//γ//**, que según aumenta su valor, aumentan las "curvaturas" del hiperplano. 
  
 +En resumen, una máquina de vectores de soporte utiliza los datos de entrenamiento transformados, a través de una función kernel, para optimizar la orientación y la ubicación de un hiperplano que produce el margen máximo entre el hiperplano y los vectores de soporte de los datos de entrenamiento. El usuario debe seleccionar la función del kernel y los parámetros asociados como //C// e //γ// para que el modelo se ajuste mejor a los datos de entrenamiento.
  
 +Las SVM dominaron el aprendizaje automático en la década de 1990 y principios de la de 2000, antes de la llegada del aprendizaje profundo. Esto se debe a su eficiencia y a que no necesitan grandes recursos computacionales. \\
 +Después llegó el aprendizaje profundo, que con las redes neuronales han conseguido hacer cosas que con las SVM hubiera sido imposibles. \\
 +Aún así, las SVM tienen aplicaciones en la actualidad. Es común usar una gran red neuronal entrenada con un dataset concreto, como preprocesador para un dataset diferente, con una SVM entrenada a la salida de la red neuronal (menos las capas superiores).
inteligencia_artificial/modelos_clasicos.1689671843.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki