Inteligencia Artificial

Conceptos

¿Qué es la inteligencia artificial?

Es un campo dentro de la informática que se centra en crear sistemas capaces de realizar tareas que normalmente requieren inteligencia humana. La IA busca desarrollar máquinas que puedan razonar, aprender, planificar, procesar lenguaje natural, percibir su entorno y tomar decisiones.

¿Qué es Machine Learning (aprendizaje automático)?

Es una subdisciplina de la inteligencia artificial que se enfoca específicamente en el desarrollo de algoritmos y modelos que permiten a las máquinas aprender patrones a partir de datos y mejorar su rendimiento sin intervención humana explícita. En lugar de ser programados para realizar una tarea específica, los sistemas de ML utilizan datos para aprender y mejorar su desempeño con el tiempo.

Aprendizaje supervisado

Le damos a la máquina ejemplos de datos entrada x y de los respectivos datos de salida y que generan dichas entradas.

Una vez que la máquina haya aprendido de estos pares entrada-salida suministrados, podremos proporcionarle una nueva entrada que no estaba en el listado inicial y producirá una salida correspondiente y apropiada.

Inteligencia Artificial 1

Algunos ejemplos

Entrada (x)Salida (y)Aplicación
emailes spam ? (0 / 1)filtros de spam
anuncioel usuario hará click? (0 / 1)marketing online
imagen de un teléfonotiene defectos? (0 / 1)inspección visual
inglésespañoltraducción
audiotextoreconocimiento de voz

Aprendizaje automático supervisado por regresión

Consiste simplemente en ajustar los pares de datos entrada-salida a una línea recta.

Si tenemos datos de la altura de una persona en función de su peso podríamos predecir la altura de una persona cuyos datos no estaban inicialmente en la base de datos. La forma más sencilla sería trazar una línea recta cuya inclinación dependerá de los datos de entrada.

Inteligencia Artificial 2

En ocasiones, será más apropiado trazar una línea curva para intentar hacer un cálculo más aproximado.

Inteligencia Artificial 3
Nomencaltura
  • Los datos de partida se pueden llamar training set, las características de cada elemento, features, y los datos que queremos descubrir targets.
  • Cada par de datos feature-target es representado como (x,y).
  • Del training set que nos dan, (x3,y3) hace referencia al dato que ocupa la tercera posición de la lista.
  • Toda esta información es enviada a un algoritmo de aprendizaje, que producirá una función (f) que también se denomina modelo.
  • El modelo recibirá un dato de entrada x y predicirá su target correspondiente. A la predicción del modelo, se la denomina y-hat o ŷ.
Generación del modelo

La fórmula de f será: fw,b(x) = wx + b o f(x) = wx + b si simplificamos un poco la sintaxis.

Este tipo de modelo se denomina regresión lineal univariante.

  • Lineal porque su gráfica es una línea.
  • Univariante porque el dato de entrada del que depende la función es una única variable.

En esta fórmula, w y b determinarán el valor de y en función de x (ŷ). w y b se denominan parámetros del modelo, coeficientes o ponderadores.

Como se puede observar en las siguientes gráficas, b determina la altura en la que comienza la línea y w su inclinación.

Inteligencia Artificial 4
Python
pip install numpy

Definimos y mostramos los arrays de features y targets:

import numpy as np
x_train = np.array([1.0, 2.0]) # Definimos el array de datos de entrada (features)
y_train = np.array([300.0, 500.0]) /# Definimos el array de datos de salida (targets)
print(x_train) # [1. 2.] Imprimimos el array de features
print(y_train) # [300. 500.] Imprimimos el array de targets

print(x_train.shape) # (2,) Imprimimos la longitud del array de features
m = x_train.shape[0]
print(f"Number of training examples is: {m}") # Number of training examples is: 2

Accedemos al elemento que ocupa la posición i de los arrays de features y targets:

i = 0 # Change this to 1 to see (x^1, y^1)
x_i = x_train[i]
y_i = y_train[i]
print(f"(x^({i}), y^({i})) = ({x_i}, {y_i})") # (x^(0), y^(0)) = (1.0, 300.0)

Para mostrar una gráfica con las coordenadas de las features y los targets, usaremos:

pip install matplotlib
import numpy as np
import matplotlib.pyplot as plt

x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])

# Plot the data points
plt.scatter(x_train, y_train, marker='x', c='r')
# Set the title
plt.title("Housing Prices")
# Set the y-axis label
plt.ylabel('Price (in 1000s of dollars)')
# Set the x-axis label
plt.xlabel('Size (1000 sqft)')
plt.show()
Inteligencia Artificial 5

Ahora vamos a hacer una gráfica del modelo, suponiendo que conocemos los valores de w y b:

import numpy as np
import matplotlib.pyplot as plt

x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])
w = 100
b = 100

def compute_model_output(x, w, b):
    m = x.shape[0]
    f_wb = np.zeros(m) # Esta función crea un nuevo array lleno de ceros
    for i in range(m):
        f_wb[i] = w * x[i] + b    
    return f_wb # Devolvemos el array con los valores de y


f_wb = compute_model_output(x_train, w, b,)

# Mostramos la gráfica de la regresión lineal
plt.plot(x_train, f_wb, c='b',label='Our Prediction')

plt.title("Housing Prices")
plt.ylabel('Price (in 1000s of dollars)')
plt.xlabel('Size (1000 sqft)')
plt.legend()
plt.show()
Inteligencia Artificial 6

Encontrar los valores de w y b

Vamos a intentar predecir la altura de una persona en función de su peso. Para ello, partiremos de los siguientes datos:

Peso(x)(Kg)Altura(y)(cm)
60160
70170
80180

La gráfica con la correspondencia entre peso y altura es la siguiente:

Inteligencia Artificial 7

Vamos a aplicar la fórmula del modelo para estos posibles valores de w y b:

  • w = 0.5, b = 150
Peso(x)(Kg)Altura(y)(cm)f(x) = wx + b
(w=1, b=100)
601600.5*60 + 150= 180
701700.5*70 + 150 = 185
801800.5 * 80 + 150 = 190

La recta en color azul es la predicción buscada a partir de los datos de entrada.

La recta en color naranja es la predicción que hacemos y que tiene un margen de error respecto de la solución buscada.

Inteligencia Artificial 8

La siguiente fórmula (función del coste del error cuadrático) permite medir la diferencia entre la predicción del modelo y los valores reales de y. A continuación tienes la misma fórmula escrita de 3 formas diferentes:

Inteligencia Artificial 9
Inteligencia Artificial 10
Inteligencia Artificial 11
Peso(x)(Kg)Altura(y)(cm)f(x) = wx + b
(w=1, b=100)
f(x) = wx + b
(w=0.5, b=150)
Inteligencia Artificial 12
(w = 1, b = 100)
Inteligencia Artificial 13
(w = 0.5, b = 150)
601601*60 + 100 = 1600.5*60 + 150 = 180(160- 160)2 = 0(180- 160)2 = 400
701701*70 + 100 = 1700.5*70 + 150 = 185(170 – 170)2 = 0.25(185- 170)2 = 225
801801 * 80 + 100 = 1800.5*80 + 150 = 190(180 – 180)2 = 1(190- 180)2 = 100
(1/2*3) *(0 + 0.25 + 25) = 1.25(1 / 2*3) * (0 + 0 + 0) = 0

El objetivo será encontrar los valores de w y b que produzcan el menor valor de J (error cuadrático).

En las ecuaciones anteriores es posible igualar b a 0. Esta simplificación hará que sea más sencillo calcular w. Quedaría así:

Inteligencia Artificial 14

El objetivo será encontrar el valor de w para el que J es lo menor posible. Vemos como a medida que nos alejamos del valor correcto de w, el valor de J(w) aumenta.

Inteligencia Artificial 15

Si añadimos de nuevo el parámetro b a la ecuación, el objetivo sigue siendo encontrar los valores de w y b que produzcan el menor valor de J(w,b). La gráfica se quedará así:

Inteligencia Artificial 16

Si hacemos cortes horizontales a la gráfica 3D anterior, podremos pasarla a un gráfico 2D en el que los todos los puntos pertenecientes a una misma elipse tienen el mismo valor de J. Es como mostrar el mapa topográfico de una montaña que se secciona a diversas alturas y todos los puntos de una misma sección tienen la misma altura.

El centro de los óvalos será el punto en el que el valor de J es mínimo.

Inteligencia Artificial 17
Inteligencia Artificial 18
Inteligencia Artificial 19
Gradiente de descenso

Es una función que se puede utilizar para minimizar cualquier tipo de función. Minimizar una función significa encontrar los parámetros de una función para los cuales el valor de la misma es lo menor posible. Nosotros lo utilizaremos para encontrar de manera automática los valores de w y b para que J (función de coste) sea lo menor posible.

Si encontramos los valores de w y b que hacen que la función J (función de coste J(w,b)) tenga el mínimo valor posible, significa que la función de predicción se ajusta lo máximo posible a la realidad.

Nosotros tenemos J(w,b) y queremos Inteligencia Artificial 20

Puede ocurrir que haya varios valores mínimos de J(w, b).

Uso del gradiente de descenso para encontrar el valor mínimo de J. Pasos

1. Inicialización. Tomaremos un punto a partir de w y b. Por ejemplo, w=3, b=4.

2. Cálculo del gradiente. Buscaremos cual es la dirección en la que debemos ir para que J(w,b) descienda de la manera más pronunciada. Para esto utilizaremos una derivada, ya que la derivada determina la pendiente de una recta.

3. Actualización de parámetros. Probamos valores de w y b en busca del descenso más pronunciado de J(w,b). Para ello, usaremos la siguiente fórmula:

Inteligencia Artificial 21

α es también llamado tasa de aprendizaje. Suele ser un número positivo pequeño, entre 0 y 1, por ejemplo 0.01. Este parámetro representa la magnitud del paso que vamos a dar. Si es muy largo, puede que nos pasemos al otro lado del valle y si es muy corto avanzaremos muy lentamente.

La derivada indica la dirección en la que nos vamos a mover.

J(w,b) es el valle por el que nos vamos a mover.

4. Iteración. Se repiten los pasos 2 y 3 hasta que se cumpla algún criterio de parada, como un número máximo de iteraciones o cuando el cambio en los parámetros sea lo suficientemente pequeño, en cuyo caso estaremos cerca del fondo del valle.

Inteligencia Artificial 22
Implementación del descenso en gradiente

La fómula del descenso del gradiente es: Inteligencia Artificial 23

En la expresión anterior, Inteligencia Artificial 24: es una derivada que representa la pendiente en la que nos vamos a desplazar. Cuando dicha pendiente sea 0, significa que estamos en el punto más profundo de la gráfica y habremos encontrado un mínimo local.

La ecuación para calcular b es: Inteligencia Artificial 25

Para que los términos w y b sean coherentes entre sí, utilizaremos las siguientes ecuaciones:

Inteligencia Artificial 26
Inteligencia Artificial 27

w = tmpw

b = tmpb

Intuición del descenso gradual

Vamos a suponer que prescindimos de b. La fórmula quedaría así:

Inteligencia Artificial 28

En el caso de prescindir de b, la gráfica sería bidimensional y tendría una fórmula similar a esta:

Inteligencia Artificial 29

El punto señalado en la gráfica es el punto de partida a partir del cual tenemos que buscar una tendencia descendente.

La pendiente de la recta tanjente a la curva en el punto señalado será la derivada de la función J.

Inteligencia Artificial 30

Si esta pendiente o derivada es negativa (Inteligencia Artificial 31 < 0), al multiplicarla por alfa (Inteligencia Artificial 32) estaremos restando un número negativo(w-α • (número negativo) ), lo cual es una suma que aumentará el valor de J(w), alejándonos del valor correcto.

La tasa de aprendizaje (α)

Si la tasa de aprendizaje es muy pequeña podemos necesitar dar muchos pasos para llegar al valor mínimo de J.

Inteligencia Artificial 33

Y si es muy grande, podemos andar dando tumbos alrdedor del valor mínimo de J sin llegar a él.

Inteligencia Artificial 34

A medida que nos apróximamos a un mínimo local, el valor de la pendiente se irá reduciendo, lo cual hace que al multiplicarlo por α vayamos generando avances más pequeños entre los diferents puntos de la gráfica.

Descenso gradual para la regresión lineal
Inteligencia Artificial 35
Inteligencia Artificial 36

Repetimos hasta convergencia:

Inteligencia Artificial 37
Inteligencia Artificial 38

Me falta entender este códio:

https://www.coursera.org/learn/machine-learning/ungradedLab/lE1al/optional-lab-gradient-descent/lab?path=%2Fnotebooks%2FC1_W1_Lab04_Gradient_Descent_Soln.ipynb

Aprendizaje automático supervisado por clasificación

Intentamos predecir un número pequeño y limitado de posibles resultados (que a menudo se llaman categorías).

En el siguiente esquema se muestra la predicción de si un paciente tendrá un tumor benigno o maligno en función de su tamaño.

Inteligencia Artificial 39

Aunque en el caso anterior sólo estamos tomando como dato de entrada el tamaño del tumor, también podríamos tener en cuenta otros factores, como la edad.

Inteligencia Artificial 40

En este caso, el algoritmo de aprendizaje podría tratar una línea para determinar la separación entre la posibilidad de que el tumor sea maligno o benigno.

Aprendizaje no supervisado

Mientras que en el aprendizaje supervisado recibimos datos de entrada x que estan asociados a respuestas etiquetadas como correctas y, en el aprendizaje no supervisado recibimos sólo datos de entrada x que no estan asociados a ninguna etiqueta de salida.

Por tanto, en el aprendizaje no supervisado tratamos de encontrar alguna estructura, patrón o simplemente algo interesante en estos datos de salida.

Algoritmo de agrupamiento (clustering)

Coloca los datos sin etiquetar en diferentes grupos o clusteres.

Inteligencia Artificial 41

Un algoritmo de agrupación podría ser usado para mostrar noticias o publicaciones similares a una por la que nos hemos interesado. El algoritmo debe detectar por si mismo cuales son los temas de los que buscar publicaciones similares.

Otro ejemplo de algortimo de agrupación podría consistir en tener los datos personales de los visitantes a una página web para intentar ver cuales son los tipos de perfiles que usualmente se interesan por nuestro contenido.

Detección de anomalías

Jupyter Notebook