Wall-E: Los Fundamentos de su Inteligencia

Episodio I

PorJordan Moles el 2 de Septiembre, 2023

En un mundo postapocalíptico devastado, donde los vestigios de la civilización humana están sepultados bajo inmensas montañas de desechos, un pequeño robot solitario llamado Wall-E abre paso a través de este paisaje distópico. Su misión: el reciclaje metódico de los desechos abandonados durante años. Pero Wall-E no se limita a clasificar trozos de plástico, láminas de metal y materia orgánica.

A través de sus interacciones con el entorno, este robot dedicado también recopila una abundancia de información, analiza millones de datos y aprende de sus experiencias para adaptarse, sobrevivir y llevar a cabo sus tareas con una eficiencia notable. Las capacidades de lo que parecía ser simplemente un pequeño robot recolector de desechos revelan los comienzos de un campo en auge: la inteligencia artificial.

La esencia misma de la inteligencia artificial: el aprendizaje.

En los primeros destellos de su existencia, nuestro pequeño robot, al igual que una computadora, nació para sumergirse en las profundidades de los cálculos, aquellos que requerirían millones de años para encontrar una respuesta humana. Las tareas que una vez fueron titánicas para las almas terrestres se alzaron ante él, insistiendo en que las domara.

Pero en sus circuitos, se estaba gestando una transformación. Una transformación que tomó inspiración de los genios de la ciencia de todo el mundo. Infundieron en nuestro robot una forma única de inteligencia, una chispa digital que cambió el juego. Wall-E, hasta entonces una máquina, se convirtió en una entidad que aprendería y tomaría decisiones complejas. Era el amanecer de la inteligencia artificial, una nueva era tecnológica.

Frente a los crecientes desafíos, Wall-E demostró su versatilidad. Se sumergió sin esfuerzo en los dos tipos de situaciones que la humanidad le presentaba. En un caso, seguía obedientemente los cálculos programados por los humanos, respondiendo como una calculadora respondería a un simple \(1+1\).

Sin embargo, se enfrentó a un enigma mucho más complejo: ¿cómo diferenciar los tipos de desechos que encontraba? ¿Cómo reconocer el plástico del metal o del material orgánico? O más generalmente, ¿cómo resolver un problema dado sin conocer el cálculo requerido para su solución? Aquí es donde entra en juego el aprendizaje, un método fascinante que llamamos Machine Learning. Un método que abre una puerta cuando no sabemos qué llave usar. El Machine Learning es una llave maestra para una multitud de tareas: reconocimiento de imágenes, predicciones bursátiles, estimación de valores del oro, detección de vulnerabilidades en ciberseguridad y, por supuesto, en nuestro caso: la clasificación de desechos.

Para dotar a esta computadora de una inteligencia que aprende, se implementaron métodos inspirados en nuestro propio proceso de aprendizaje. Entre ellos, destacan tres enfoques fundamentales:

• En primer lugar, el aprendizaje supervisado, que es el pilar fundamental del Aprendizaje Automático. Al igual que nuestra propia experiencia de adquisición de conocimientos, este método guía al pequeño ordenador con ruedas proporcionándole ejemplos previamente etiquetados. Como un aprendiz ávido de asimilar conocimientos, Wall-E se expone a situaciones donde los resultados esperados ya son conocidos. Luego, al observar estos ejemplos, poco a poco logra generalizar las relaciones entre las entradas y las salidas, lo que le permite tomar decisiones y resolver problemas similares a los que enfrentará más adelante.
Créditos: Disney/PIXAR
Créditos: Disney/PIXAR
• Después, el aprendizaje no supervisado, una forma más libre y exploratoria de la inteligencia artificial. Este método permite que la computadora descubra de manera autónoma estructuras y patrones ocultos dentro de los datos, sin la necesidad de ejemplos previamente etiquetados. Como un intrépido explorador, Wall-E utiliza su análisis sensorial para discernir patrones, agrupar información similar y explorar las sutilezas de su entorno. A través de esta exploración sin restricciones, adquiere una comprensión profunda del mundo que lo rodea, revelando así conocimientos insospechados.
• Finalmente, el aprendizaje por refuerzo, que se basa en un sistema de recompensas y castigos para guiar a la computadora en su aprendizaje. Al igual que nuestras propias motivaciones, Wall-E es recompensado cuando completa una tarea con éxito y sufre consecuencias negativas en caso de fracaso. Estos estímulos y sanciones le permiten optimizar sus acciones, tomar decisiones inteligentes y perfeccionar sus habilidades con el tiempo.
Créditos: Disney/PIXAR

 

El Bebé Robot Crecerá: La Arquitectura del Aprendizaje Supervisado

 

Al Nacimiento de Wall-E, la humanidad ya había trazado su éxodo hacia los confines lejanos del espacio, dejando atrás una Tierra sofocada bajo el peso del cambio climático y la contaminación invasiva. Los equilibrios naturales que habían acunado a nuestro mundo durante tanto tiempo se habían desmoronado, relegando al planeta a una nueva realidad. Las ciudades una vez radiantes de vitalidad y efervescencia no eran más que vestigios, testigos silenciosos de una era ya pasada.

Sin embargo, un grupo de científicos se comprometió a quedarse en esta tierra cansada, guiados por una visión audaz: instruir a este pequeño robot lleno de potencial para que diferenciara los metales, clasificara los plásticos, todo ello con una misión crucial en mente: limpiar y regenerar el propio planeta.

Créditos: Disney/PIXAR
De esta manera comenzó una fase de aprendizaje, donde los conocimientos humanos fueron transmitidos a Wall-E. Los científicos utilizaron un método especial para guiar a este robot aprendiz: el aprendizaje supervisado. Esta base fundamental del Aprendizaje Automático le brindó a Wall-E la oportunidad de evolucionar y crecer al absorber ejemplos claramente etiquetados. Los inicios de esta aventura se centran en este principio, invitándonos a adentrarnos en los complejos mecanismos del aprendizaje y descubrir los elementos cruciales que lo impulsan.

1. El Dataset: Un Tesoro de Información

Como una mina de oro para Wall-E, el conjunto de datos, o dataset, es una colección organizada de ejemplos en los cuales el robot basará su aprendizaje. Cada ejemplo consta de diversas variables de entrada (features) que se presentarán en una matriz (algo similar a una tabla) y las salidas esperadas correspondientes (targets) que se presentarán en un vector (una columna). Estas últimas variables son las que Wall-E intentará predecir.

Por ejemplo, si deseamos enseñar a Wall-E a reconocer desechos, las características específicas de los objetos constituirán los datos de entrada (densidad, conductividad térmica, eléctrica, etc.), y las etiquetas que indican el tipo de cada objeto constituirán las salidas esperadas (plástico, metálico u orgánico). Nada complicado con este pequeño ejemplo de tabla que contiene 5 muestras.

IndiceDensidadConductividad Eléctrica (\(S.m^{-1}\))Tasa de CarbonoMateria
14.5\(2.4 \times 10^{6}\)0Metal
20.5\(10^{-16}\)0.5Orgánico
319.3\(41 \times 10^{6}\)0Metal
41.1\(10^{-16}\)0.4Orgánico
51.2\(10^{-14}\)0Plástico

Por supuesto, como un robot encargado de clasificar basura, esta tarea es su principal misión. Pero nuestro pequeño robot también se apasiona por estimar el precio de los metales, especialmente el del oro. Sin embargo, como no comprende realmente el sistema monetario humano, convierte todo en tornillos. 

Por lo tanto, para entretenerlo, los científicos le hacen analizar cada trozo de metal dorado para determinar su pureza y le dan su valor de mercado. Aquí tienes un ejemplo ilustrativo con 5 variables.

IndicePurezaPrecio del Oro
10.3745401224.193388
20.9507141483.925567
30.7319941360.214557
40.5986581284.274057
50.1560191004.083221
Gracias a un conjunto de datos de entrenamiento mucho más amplio, podrá aprender a clasificar los metales, el plástico y los materiales orgánicos según sus características y evaluar el precio de un metal desconocido según su pureza.

2. El Modelo y sus Parámetros: La Arquitectura del Aprendizaje

Ahora, introduzcamos la estructura que Wall-E utilizará para aprender a partir del conjunto de datos. Esto será nuestro modelo. Imagina una «caja negra» como un dispositivo electrónico que Wall-E utiliza para procesar información y hacer predicciones. Es «negra» en el sentido de que su funcionamiento interno es algo misterioso y complejo, al menos desde el punto de vista de Wall-E. Dentro de esta caja, hay engranajes, palancas y mecanismos ocultos que transforman las entradas (los datos que Wall-E recopila) en salidas (las predicciones que Wall-E hace).

Dentro de esta caja negra, se encuentran los «parámetros». Estos son como los ajustes internos que Wall-E puede cambiar para mejorar su capacidad de hacer predicciones precisas. Imagina que son las perillas y botones secretos que Wall-E puede girar y presionar para hacer que la caja negra funcione de manera más efectiva.

Ahora, cuando hablamos de «modelo», nos referimos a una configuración específica de esta caja negra o como cada pieza interactúa con el resto del sistema.

El aprendizaje supervisado consiste en ajustar los parámetros de esta caja negra de manera que las predicciones que hace sean lo más cercanas posible a las respuestas correctas (etiquetas) que se proporcionan en el conjunto de datos de entrenamiento. A medida que ajusta los parámetros y observa cómo cambian las predicciones, Wall-E está tratando de descubrir cómo funciona realmente esta caja negra y cómo hacerla funcionar mejor.

Estos modelos pueden ser de diferentes naturalezas, algunos son lineales y otros no lineales. Comencemos explorando los modelos lineales:

Modelos Lineales: La Simplicidad en la Linealidad

Los modelos lineales son representaciones matemáticas relativamente simples pero poderosas. Suponen que la relación entre las entradas y las salidas es lineal, lo que significa que puede ser representada por una línea (o un plano o un hiperplano en un espacio multidimensional).

Como se mencionó anteriormente, los científicos no limitaron al robot simplemente a reciclar basura, sino que también le enseñaron a estimar el precio de un metal en función de su pureza. Tomando sus datos nuevamente, Wall-E tiene un conjunto de datos que solo incluye k muestras de oro, donde su pureza es la característica de entrada \(x^{(k)}\) y el precio correspondiente es el objetivo \(y^{(k)}\). Retomemos la tabla anterior para ilustrar esto.

Indicexy
10.3745401224.193388
20.9507141483.925567
30.7319941360.214557
40.5986581284.274057
50.1560191004.083221
Aquí, tenemos 5 muestras de oro con sus respectivos datos que nos indican, por ejemplo, que la muestra 2 tiene una pureza \(x^{(2)}=0.731994\) y un valor de \(y^{(2)}=1360.214557\) tornillos. En el gráfico, representamos los datos contenidos en la tabla (mostramos 50 en lugar de 5, y tenga en cuenta que podría haber millones).
Créditos: Disney/PIXAR

Un modelo como este podría representarse con una ecuación en la forma \(y = ax + b\), donde «a» (la pendiente) y «b» (la ordenada al origen) son parámetros ajustables dentro de la caja negra del modelo.

El aprendizaje supervisado tiene como objetivo encontrar los valores óptimos de «a» y «b» para que el modelo pueda trazar la mejor línea posible que minimice el error entre las predicciones y los valores reales.

El gráfico adjunto representa el modelo lineal con «a» y «b» tomados al azar.

Por supuesto, la realidad es más compleja que eso, y para una estimación más precisa del precio del oro, sería necesario considerar información histórica sobre los precios del oro a lo largo del tiempo, así como características económicas, políticas y geopolíticas relevantes que puedan influir en su valor.

Aunque los modelos lineales son simples y fáciles de interpretar, pueden ser limitados en su capacidad para capturar relaciones complejas entre variables. Ahí es donde entran en juego los modelos no lineales.

Modelos No Lineales: La Elegancia en la Complejidad

Por otro lado, los modelos no lineales ofrecen una flexibilidad mayor en comparación con los modelos lineales. Son capaces de capturar relaciones complejas y claramente no lineales entre las entradas y las salidas, lo que permite representar comportamientos más sofisticados de los datos. Si imaginamos que en realidad tenemos datos que se comportan más o menos así.
Estimación del Precio del Oro
Clasificación Plástico-Metal
Créditos: Disney/PIXAR

Entonces, tales modelos podrían representarse más bien con una ecuación en la forma \(y = ax^2 + bx +c\) (un polinomio de grado 2 para la primera curva) o funciones más complicadas (como la sigmoidal para la segunda), donde el objetivo sigue siendo encontrar los parámetros que minimicen el error.

Por lo tanto, la elección entre un modelo lineal y un modelo no lineal depende de la naturaleza de los datos y de la complejidad del problema a resolver. Los primeros suelen ser preferidos cuando las relaciones entre las variables son simples y claras, mientras que los modelos no lineales se favorecen para tareas más complejas y conjuntos de datos ricos en información.

3. La Función de Costo: Medir los Errores

Para medir qué tan bueno es Wall-E en esta tarea de estimar el oro, utilizamos una función especial llamada Función de Costo. Esta función juega un papel esencial al cuantificar los errores entre las estimaciones de precio realizadas por Wall-E y los precios reales del oro provenientes de los datos históricos. Calcula el error para cada estimación y luego suma estos errores para formar una medida global del rendimiento de Wall-E en la estimación del precio del oro.
Créditos: Disney/PIXAR
Siendo un perfeccionista real, Wall-E se esfuerza por tener una Función de Costo adaptada al modelo y lo más pequeña posible. Esto significa que desea minimizar los errores entre sus estimaciones de precio y los precios reales, con el fin de realizar sus predicciones con la mayor precisión posible.

4. El Algoritmo de Aprendizaje: Encontrar el Óptimo

Para reducir esta Función de Costo, Wall-E utiliza un algoritmo bien conocido llamado descenso de gradiente. Esta técnica le permite ajustar gradualmente sus parámetros internos (para el modelo lineal, ajusta «a» y «b») según los errores cometidos durante la estimación de los precios del oro. En cada paso del aprendizaje, Wall-E mejora su rendimiento acercándose al óptimo, es decir, donde la Función de Costo es mínima.
Créditos: Disney/PIXAR
Se nota que en cada iteración, los errores se vuelven cada vez más pequeños hasta alcanzar una constante. De esta manera, Wall-E se convierte en un experto en la estimación del precio del oro, realizando sus predicciones con una precisión notable.
Así, gracias a la curva final, Wall-E puede, por ejemplo, estimar el precio de una muestra de oro con una pureza del 0.8, aquí valdría más o menos 1400 tornillos.

Un Super Robot

El universo de aprendizaje de Wall-E se extiende a través de una multitud de aplicaciones, cada una resonando con problemas bien definidos pero que podemos clasificar en dos familias muy distintas: regresión y clasificación.
La regresión es una técnica cuantitativa utilizada para predecir valores objetivos continuos, es decir, números que pueden tomar cualquier valor dentro de un cierto intervalo. Por lo tanto, entre los pasatiempos favoritos de Wall-E, la estimación del precio del oro forma parte de los problemas de regresión. Otros ejemplos incluyen:
Estimación de la cantidad de agua potable restante: Wall-E puede utilizar datos históricos sobre los niveles de agua subterránea, las precipitaciones y las tasas de evaporación para crear un modelo de regresión. Este modelo podría utilizarse para estimar la cantidad de agua potable restante en las fuentes subterráneas, lo que permitiría a los humanos planificar mejor su uso de este recurso vital.
Créditos: Disney/PIXAR
Créditos: Disney/PIXAR
Predicción de la producción de energía solar: Wall-E depende de la energía solar para alimentar sus funciones y recargarse. Utilizando datos sobre la insolación diaria, la calidad de los paneles solares y otros factores ambientales, Wall-E podría crear un modelo de regresión para predecir la producción de energía solar en diferentes momentos del día y en diferentes condiciones climáticas.
Estimación de la vida útil de las baterías: Las baterías de Wall-E se degradan con el tiempo y el uso. Al analizar el rendimiento pasado de las baterías y tener en cuenta las condiciones ambientales, Wall-E podría desarrollar un modelo de regresión para estimar la vida útil restante de las baterías. Esto permitiría planificar los reemplazos de baterías de manera proactiva.
Créditos: Disney/PIXAR
Créditos: Disney/PIXAR
Predicción de los niveles de contaminación: Wall-E recorre las montañas de basura y las zonas contaminadas. Al recopilar datos sobre los niveles de contaminación del aire y el agua, así como sobre las prácticas de vertido de desechos, podría crear un modelo de regresión para predecir los niveles futuros de contaminación en diferentes regiones, ayudando así a identificar las áreas más críticas para la limpieza.
La clasificación es otra técnica de aprendizaje supervisado cualitativa, es decir, se utiliza para predecir etiquetas o categorías discretas. Por lo tanto, en su búsqueda para limpiar la Tierra, Wall-E debe clasificar una amplia variedad de desechos. Utilizando datos sobre la forma, el tamaño, la composición y la peligrosidad de los desechos, puede crear un modelo de clasificación para categorizarlos automáticamente en diferentes clases (plásticos, metales, materiales orgánicos, desechos tóxicos, etc.). Esto le ayudaría a optimizar el proceso de reciclaje y contribuir a la preservación del medio ambiente. Aquí tienes algunos ejemplos de aplicaciones:
Clasificación de objetos celestiales: Al moverse a través del universo, Wall-E encuentra una multitud de objetos celestiales, desde asteroides hasta cometas y planetas. Por lo tanto, puede crear un modelo de clasificación para identificar automáticamente los diferentes objetos celestiales en función de sus características y trayectorias.
Créditos: Disney/PIXAR
Créditos: Disney/PIXAR
Clasificación de las emociones humanas: Cuando Wall-E interactúa con los humanos, puede recopilar datos sobre las expresiones faciales, los gestos y las tonalidades vocales, y así desarrollar un modelo de clasificación para reconocer las emociones humanas como la alegría, la tristeza, el miedo o la ira. Esto le permitiría comprender mejor y adaptar sus interacciones con los seres humanos, haciendo que sus relaciones sean aún más auténticas.
Clasificación de señales extraterrestres: Al escudriñar las estrellas, Wall-E puede detectar señales provenientes de otras civilizaciones extraterrestres. Para comprender estas comunicaciones cósmicas, puede utilizar el aprendizaje supervisado para crear un modelo de clasificación capaz de distinguir los diferentes tipos de señales, como mensajes de saludo, patrones matemáticos o advertencias.
Créditos: Disney/PIXAR

Exploración y Enriquecimiento

Evolucionando en este complejo mundo, el pequeño robot solitario demostró una maestría incomparable ante cada desafío que se presentaba. Su viaje comenzó modestamente como un simple recolector de basura, pero evolucionó para convertirse en un experto en estimación de valores, revelando así los cimientos profundos de la inteligencia artificial. Esta trayectoria singular destaca el increíble potencial del aprendizaje automático y las técnicas que lo acompañan.

El aprendizaje supervisado, verdadera piedra angular de esta inteligencia, permitió a Wall-E trascender las limitaciones de su naturaleza de máquina y convertirse en un aprendiz ágil. Guiado por ejemplos preetiquetados, logró asimilar conocimientos complejos y tomar decisiones sabias. Luego, adoptó modelos lineales y no lineales para interpretar y predecir relaciones dentro de los datos, transformándose en un maestro en la estimación del valor del oro y en un experto en clasificación de desechos.

Las secciones siguientes se sumergen en dos aspectos cruciales del aprendizaje supervisado:

Parte II: El Pequeño Minero de Oro

Profundizaremos en el modelo de regresión que permitió a Wall-E adquirir una comprensión profunda de la estimación del valor del oro. Desde el análisis del conjunto de datos hasta el diseño del modelo, pasando por el uso de la función de costo y el algoritmo de descenso de gradiente, cada paso se desglosará meticulosamente. Exploraremos las sutilezas de los modelos lineales y no lineales, mostrando cómo Wall-E optimizó su rendimiento para convertirse en un maestro en el arte de la estimación del oro.

Parte III: El Especialista en Clasificación

En esta parte, nos adentraremos en el complejo universo de la clasificación de desechos, una tarea tanto crucial como desafiante. Detallaremos cómo Wall-E utilizó modelos de clasificación para aprender a distinguir los diferentes tipos de desechos. Desde el procesamiento del conjunto de datos hasta la creación del modelo de clasificación, pasando por los desafíos únicos que plantea la diversidad de materiales, exploraremos cómo Wall-E pasó de ser un simple recolector de basura a convertirse en un experto en reciclaje.

Al igual que Wall-E aprendió a distinguir el plástico del metal y a estimar la pureza del oro, la inteligencia artificial encuentra su lugar en campos que van desde la predicción de la producción de energía solar hasta la clasificación de las emociones humanas. El ingenio de Wall-E refleja así una evolución en la forma en que la IA enriquece nuestra comprensión del mundo y mejora nuestras interacciones con él.

El camino recorrido por Wall-E es solo un prólogo. Los algoritmos y modelos que abrazó han establecido un precedente para la inteligencia artificial, ampliando los horizontes de lo que las máquinas pueden lograr. Y mientras los científicos e ingenieros continúan construyendo sobre estas bases, la historia de Wall-E sirve como un recordatorio inspirador: incluso en medio de los escombros, los desechos pueden convertirse en una valiosa fuente de conocimiento y soluciones innovadoras.

Bibliografía

G. James, D. Witten, T. Hastie et R. Tibshirani, An Introduction to Statistical Learning, Springer Verlag, coll. « Springer Texts in Statistics », 2013

D. MacKay, Information Theory, Inference, and Learning Algorithms, Cambridge University Press, 2003

T. Mitchell, Machine Learning, 1997

F. Galton,  Kinship and Correlation (reprinted 1989), Statistical Science, Institute of Mathematical Statistics, vol. 4, no 2,‎ 1989, p. 80–86

C. Bishop, Pattern Recognition And Machine Learning, Springer, 2006


import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Random data generation
np.random.seed(42)  # To reproduce the same results on each run
n_samples = 50  # Number of samples
purity = np.random.rand(n_samples)  # Random purity values between 0 and 1
gold_price = 1000 + 500 * purity + np.random.normal(0, 50, n_samples)  # Gold price based on purity

# Creating the data array
data = np.column_stack((purity, gold_price))

# Creating a Pandas DataFrame for the table
df = pd.DataFrame(data, columns=['Purity', 'Gold Price'])

# Calculate a non-optimal linear regression line
x = data[:, 0]
non_optimal_line = 600 * x + 1000

# Creating the plot
plt.figure(figsize=(10, 6))
plt.scatter(data[:, 0], data[:, 1], label='Data')

# Adding the non-optimal linear regression line in red
plt.plot(x, non_optimal_line, color='red', label='Non-Optimal Linear Regression Line')


plt.xlabel('Gold Purity')
plt.ylabel('Gold Price')
plt.title('Relationship between Gold Purity and Price')
plt.grid(True)
plt.show()





import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Random data generation
np.random.seed(42)  # To reproduce the same results on each run
n_samples = 50  # Number of samples
purity = np.random.rand(n_samples)  # Random purity values between 0 and 1
gold_price = 1000 + 500 * purity + np.random.normal(0, 50, n_samples)  # Gold price based on purity

# Creating the data array
data = np.column_stack((purity, gold_price))

# Creating a Pandas DataFrame for the table
df = pd.DataFrame(data, columns=['Purity', 'Gold Price'])

# Calculate a non-optimal linear regression line
x = data[:, 0]
non_optimal_line = 600 * x + 1000

# Creating the plot
plt.figure(figsize=(10, 6))
plt.scatter(data[:, 0], data[:, 1], label='Data')

# Adding the non-optimal linear regression line in red
plt.plot(x, non_optimal_line, color='red', label='Non-Optimal Linear Regression Line')

# Adding lines indicating errors for each point relative to the non-optimal line
for i in range(n_samples):
    plt.plot([x[i], x[i]], [data[i, 1], non_optimal_line[i]], color='green', linestyle='--', linewidth=1)

# Adding a single entry in the legend for the error lines
plt.legend(['Data', 'Non-Optimal Linear Regression Line', 'Error'])

plt.xlabel('Gold Purity')
plt.ylabel('Gold Price')
plt.title('Relationship between Gold Purity and Price')
plt.grid(True)
plt.show()





import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Define the sigmoid function
def sigmoid(x, a, b):
    return 1 / (1 + np.exp(-(a * x + b)))

# Define the gradient descent function for sigmoid
def gradient_descent_sigmoid(X, y, P, learning_rate, n_iterations):
    m = len(y)
    cost_history = np.zeros(n_iterations)
    for i in range(n_iterations):
        P = P - learning_rate * (1/m) * X.T.dot(sigmoid(X.dot(P), 1, 0) - y)
        cost_history[i] = cost_function_sigmoid(X, y, P)
    return P, cost_history

# Define the cost function for sigmoid
def cost_function_sigmoid(X, y, P):
    m = len(y)
    return -1 / m * np.sum(y * np.log(sigmoid(X.dot(P), 1, 0)) + (1 - y) * np.log(1 - sigmoid(X.dot(P), 1, 0)))

# Random data generation for classification
np.random.seed(42)
n_samples = 50
density = np.random.uniform(0.8, 2.0, n_samples)
threshold = 1.4
material = np.where(density > threshold, 1, 0)

# Creating the design matrix X for classification
X_class = np.column_stack((np.ones(n_samples), density))

# Creating the target vector y for classification
y_class = material.reshape(material.shape[0], 1)

# Initialize P for sigmoid classification
P_class = np.random.randn(2, 1)

# Setting the learning rate and number of iterations for sigmoid classification
learning_rate_class = 0.5
n_iterations_class = 1000000

# Performing gradient descent for sigmoid classification
P_final_class, cost_history_class = gradient_descent_sigmoid(X_class, y_class, P_class, learning_rate_class, n_iterations_class)

# Calculate the sigmoid classification curve
x_range_class = np.linspace(0.8, 2.0, 100)
y_pred_sigmoid_class = sigmoid(x_range_class, P_final_class[1], P_final_class[0])

# Creating the plot for sigmoid classification
plt.figure(figsize=(10, 6))
plt.scatter(density, material, label='Data')
plt.plot(x_range_class, y_pred_sigmoid_class, color='red', label='Fitted Sigmoid Classification')
plt.xlabel('Density')
plt.ylabel('Material (Metal: 1, Plastic: 0)')
plt.title('Classification Using Fitted Sigmoid Curve')
plt.legend()
plt.grid(True)
plt.show()

# Display the fitted parameters and cost history for sigmoid classification
print("Fitted Sigmoid Classification Parameters (a, b):", P_final_class)
plt.plot(range(n_iterations_class), cost_history_class)
plt.xlabel('Number of Iterations')
plt.ylabel('Cost')
plt.title('Cost History during Gradient Descent (Sigmoid Classification)')
plt.show()





import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Random data generation
np.random.seed(42)
n_samples = 50
purity = np.random.rand(n_samples)
gold_price = 1000 + 500 * purity + np.random.normal(0, 50, n_samples)  # Linear model

# Creating the data array
data = np.column_stack((purity, gold_price))

# Creating a Pandas DataFrame for the table
df = pd.DataFrame(data, columns=['Purity', 'Gold Price'])

# Define the linear function
def linear(x, a, b):
    return a * x + b

# Define the gradient descent function
def gradient_descent(X, y, P, learning_rate, n_iterations):
    m = len(y)
    cost_history = np.zeros(n_iterations)
    for i in range(n_iterations):
        P = P - learning_rate * (1/m) * X.T.dot(X.dot(P) - y)
        cost_history[i] = cost_function(X, y, P)
    return P, cost_history

# Define the cost function
def cost_function(X, y, P):
    m = len(y)
    return 1 / (2 * m) * np.sum((X.dot(P) - y) ** 2)

# Creating the design matrix X
X = np.column_stack((np.ones(n_samples), purity))

# Creating the target vector y
y = gold_price.reshape(gold_price.shape[0], 1)

# Initialize P
P = np.random.randn(2, 1)

# Setting the learning rate and number of iterations
learning_rate = 0.1
n_iterations = 1000

# Performing gradient descent
P_final, cost_history = gradient_descent(X, y, P, learning_rate, n_iterations)

# Calculate the linear regression line
x_range = np.linspace(0, 1, 100)
y_pred = linear(x_range, P_final[1], P_final[0])

# Creating the plot
plt.figure(figsize=(10, 6))
plt.scatter(purity, gold_price, label='Data')
plt.plot(x_range, y_pred, color='red', label='Optimal Linear Regression')
plt.xlabel('Gold Purity')
plt.ylabel('Gold Price')
plt.title('Linear Relationship between Gold Purity and Price with Linear Regression')
plt.legend()
plt.grid(True)
plt.show()