En este vÃdeo, vamos a presentar dos algoritmos distintos para ayudarnos a diseñar sistemas basados en reglas que aproximen funciones. Los algoritmos que vamos a denominar "entrenamiento de universos fijos" y "entrenamiento de universos variables". Recordemos que estamos en el escenario de aprendizaje de máquinas y lo que ahora queremos hacer es aprovechar la información de las entradas y las salidas deseadas de nuestro sistema, para hacer una parte del diseño de ese sistema. En particular, imaginemos un sistema cualquiera, una entrada, una salida y una primera situación en donde hemos hecho toda la tarea de diseño, menos encontrar la base de reglas. No tenemos la base de reglas. El primero de los algoritmos, el entrenamiento de universos fijos, nos va a ayudar a encontrar una buena colección de reglas. Y va a haber una segunda situación en donde tenemos menos cosas diseñadas; no hemos diseñado ni la base de reglas ni las variables lingüÃsticas de las entradas y las salidas, y el algoritmo nos va a ayudar en ambas tareas. Ese algoritmo es el algoritmo de entrenamiento de universos variables. Planteamos un ejemplo para ilustrar y comenzamos con el algoritmo de entrenamiento de universos fijos. Supongamos ahora una situación de dos entradas x_1, x_2 y una salida y. Y hemos ya diseñado las variables lingüÃsticas, son las que ustedes ven allÃ, con las etiquetas, los términos lingüÃsticos que ustedes ven allÃ. Los leo: bajo, medio, alto, para x_1; negativo, 0 y positivo para x_2; poco, algo, mucho, para y. Yo voy a quedarme con las iniciales. Y ahora, lo que necesitamos es construir la base de reglas y para ello contamos con unos datos, que son los que se muestran en esta tabla. Estos datos muestran el comportamiento deseado del sistema. Me explico: queremos una primera situación en donde si la entrada en x_1 es Alfa_1 y la entrada en x_2 es Beta_1, la salida sea lo más parecido posible a Gamma_1. Pero tenemos otra situación, en donde si las entradas son Alfa_2 y Beta_2, lo que queremos es que la salida sea Gamma_2. Y tenemos una colección de r situaciones deseadas. ¿Cómo las vamos a aprovechar para construir la base de reglas? Tomemos el primero de esos comportamientos deseados, el primer renglón. Lo que vamos a hacer es analizar la relación que tiene la entrada en la primera variable con cada una de sus etiquetas. Luego, la entrada en la segunda variable con cada una de sus etiquetas y después, la salida con cada una de sus etiquetas. Por ejemplo, Alfa_1. Supongamos que Alfa_ está en esta posición y nos preguntamos cuál es el grado de pertenencia de Alfa_1 a cada uno de los conjuntos difusos de la variable lingüÃstica. En este caso, las respuestas numéricas son las siguientes: al conjunto bajo, su grado de pertenencia 0,75; al conjunto medio es 0,25 y al conjunto alto es 0. De los tres grados de pertenencia, nos quedamos con la etiqueta que tiene el mayor grado de pertenencia; en este caso es bajo. Lo que decimos es que ese valor Alfa_1 tiene una cierta compatibilidad con el concepto de bajo, una cierta compatibilidad con el concepto de medio y otra con el de alto, y tomamos el que nos da la máxima compatibilidad, la compatibilidad de su grado de pertenencia. De este análisis ya salió un término lingüÃstico. Hacemos lo mismo para la segunda variable, para la segunda entrada, en este caso, y los grados de compatibilidad que nos resultan para este ejemplo hipotético son: 0 para negativo; nos da 1 para el término lingüÃstico 0 y nos da 0 para el término lingüÃstico positivo. Tomamos el de máxima compatibilidad, que serÃa el término lingüÃstico 0. Y hacemos lo mismo con la salida. Analizamos la compatibilidad a las tres etiquetas que son respectivamente 0, 0,25 y 0,75, y nos quedamos con las de máxima compatibilidad. En este caso es el término lingüÃstico mucho. Y con esos tres términos lingüÃsticos podemos construir ya una regla. Llamamos a esa regla "candidata". Tenemos una regla candidata que dirÃa que si x_1 es bajo y x_2 es 0, entonces y es mucho. ¿Por qué la llamamos candidata? Porque ahora vamos a hacer eso para cada uno de los r casos. Vamos a tener r reglas candidatas. Y de pronto sucede que, cuando vayamos bajando en la tabla, encontramos una regla que ya la habÃamos encontrado antes. SerÃa una regla repetida. No vale la pena poner dos reglas que digan lo mismo, el mismo conocimiento en dos reglas. Entonces esa la desecharÃamos. Si se repite, no la adicionamos a la base de reglas. Pero puede suceder una cosa distinta y es que vamos bajando en nuestra tabla y encontramos una regla que es incoherente con una regla que habÃamos encontrado antes. Dos reglas que tienen igual antecedente y distinto consecuente. Por ejemplo, aquà una regla que dijera si x_1 es bajo y x_2 es 0, entonces la salida debe ser mucho y otra, incoherente con lo anterior, que dirÃa las mismas condiciones, pero la salida es algo. ¿Cuál de las dos escojo? ¿A cuál de las dos reglas le creo más? Construimos un indicador de certeza de cada regla. ¿Qué tanto le creemos a cada una de esas reglas? Lo calculamos para las dos reglas y escogemos el que tenga mayor certeza. ¿Cuál es el grado de certeza? Recuerden que para construir la regla calculamos la compatibilidad de la entrada con cada uno de los términos lingüÃsticos. Y esa compatibilidad la calculamos cuando vamos bajando en cada uno de los casos. Lo que hacemos es calcular la compatibilidad de esa regla, tomando una t-norma de las compatibilidades de los antecedentes. Lo usual es hacer el producto de esas compatibilidades y asà asignamos la certeza a cada una de las reglas. Y a la hora de encontrar dos reglas incoherentes la una con la otra, nos quedamos con la regla de máxima certeza entre las dos. Esa es la que vamos a escoger. Presentemos ahora el segundo de los algoritmos, el algoritmo de universos variables. En este algoritmo, recuerden, no tenemos diseñadas las variables lingüÃsticas, tampoco tenemos la base de reglas. Lo que tenemos son los datos de entrenamiento. ¿Cómo utilizamos esos datos de entrenamiento en esta estrategia? Ubicamos sobre la recta cada uno de los datos de entrada, Alfa_1, Beta_1 y de salida y, y la idea es colocar un conjunto difuso centrado en esos datos. Por ejemplo, un triángulo. Pongamos un triángulo centrado en Alfa_1, un triángulo centrado en Beta_1, un triángulo centrado en Gamma_1, y démosle cualquier nombre. Por ejemplo, más que nombre, casi que una designación numérica. Y ahora construimos con esos tres conjuntos difusos una regla. Una regla difÃcil de interpretar lingüÃsticamente, porque como no tenemos la variable lingüÃstica, no tiene un sentido lingüÃstico, que es ese Fi_1, por ejemplo. Pero tenemos conjuntos difusos ahora en las variables y una base de reglas. Y hacemos lo mismo con cada una de las colecciones de datos de entrada. Si tenemos 100 datos de entrada, tendrÃamos en cada variable lingüÃstica, 100 conjuntos difusos y 100 reglas. A la hora de comparar estas dos estrategias, nos encontramos realmente con dos situaciones muy distintas. La técnica de universos fijos nos permite encontrar un conjunto adecuado de reglas, en sentido que es pequeño, porque ya tenemos los datos de entrada y de salida con su significado lingüÃstico; ya tenemos las funciones semánticas. En cambio en universos variables vamos a generar montones de conjuntos y muchas reglas, también. La interpretación lingüÃstica que podemos hacer en el caso de universos fijos es grande. Vamos a encontrar reglas cuyo significado entendemos. Pero, eso no es lo que le preocupa al algoritmo de entrenamiento por universos variables. Le preocupa más la precisión. Y este balance es una situación que vamos a encontrar en muchos de los algoritmos de entrenamiento. ¿Qué prefiero, la precisión numérica o la interpretabilidad de las reglas que yo pueda obtener? Algunos algoritmos son buenos en interpretabilidad y malos en precisión y otros, al revés. Dependiendo nuestra aplicación, el problema que queramos resolver, podemos preferir una cosa u otra. En general, el tema del interpretabilidad también está asociado a la generalización del conocimiento que se descubre. Uno de los problemas que existe en el aprendizaje de máquina, en general, para todos los sistemas, es que utilizamos unos datos para aprender un comportamiento, pero no solo para repetir ese comportamiento, sino para encontrar comportamientos adecuados, cuando las entradas no son exactamente las de entrenamiento. ¿Cómo generalizar lo que aprendà a unas situaciones distintas con las que aprendÃ? Y en ese sentido, hay algoritmos mejores para hacer la generalización y otros no tan buenos.