viernes

Regresión Lineal en Netbeans y SQL


Autor:Angel Aedo Busto
Competencia: Creatividad e Innovación (Nivel 1)
Palabras Clave: Regresión Lineal, Netbeans,  SQL, Progración, Recta.

Descripción 

    Desarrollar una aplicación basada en la arquitectura Cliente-Servidor de tres niveles (MVC: Modelo-Vista-Controlador), ésta debe presentar dos alternativas de solución al problema de ayudar a ajustar una curva, usando regresión lineal, para lo cual, la aplicación debe permitir al usuario ingresar los puntos (x,y) en una base de datos MySql.

     Uno de los software debe ser sobre consola y otro sobre Swing (ambos implementan transacciones).

    El objetivo es generar una solución de propósito general que permita apoyar, para el dominio específico del problema seleccionado, ajustes de curvas, en este caso lineas rectas, que permitan su modelamiento.

    Cada aplicación debe manejar los procesos de actualización de datos de ajustes -ingresar los puntos (x,y)- y la aplicación de la curva ajustada a distintos casos de la problemática seleccionada. 



Modelo de Solución

    Descripción de Regresión Lineal

    La regresión lineal es una herramienta de cálculo que permite calcular una recta a partir de una nube de puntos. Para esto son usados una considerable cantidad de par ordenados (x,y).
    La ecuación que permite la obtención de una recta está dada por:

Captura de pantalla 2011-12-10 a la(s) 3.01.39
    Donde “a” es parte de la ecuación de la recta y=ax+b. Por lo que la obtención de “b” está dado por:
Captura de pantalla 2011-12-10 a la(s) 3.05.20
    Una vez obtenida la ecuación de la recta, se puede validar su veracidad.
    Para esto se calcula la siguiente ecuación:
Captura de pantalla 2011-12-10 a la(s) 3.05.26

    Esta ecuación arroja un resultado entre 0 y 1, donde 1 es el valor máximo de veracidad, siendo de este modo el valor 0, lo más lejano a la validación de una recta.


Casos de Borde

    Matemáticamente, un punto de desborde está dado en la obtención de “a”. Pues al existir una división, el denominador jamás debe ser cero.

    Otro caso de desborde desde el punto de vista matemático, se da cuando todos los x, son iguales. Pues esto representa un recta con pendiente infinita. Esto quiere decir que la ecuación de la recta ya no está dada por y=ax+b, si no por x=(valor). 

    Estas 2 instancias matemáticas han de ser consideradas en la creación del trabajo, sin embargo, también han de ser consideradas los desbordes de las aplicaciones en si. Tal es el caso de ingreso de letras o caracteres ajenos a los dígitos, o bien fuera del formato establecido. A continuación se presentan ejemplos de entrada, proceso y salida, con descripción de solución planteada.

1. “0 , 1” ->[Proceso]->”Error”.
    Este caso, es el mencionado, en el apartado de errores matemáticos. Puesto que la ecuación de cálculo para “a” se encuentra una división. Es posible dar múltiples soluciones a este error, sin embargo la solución más práctica está dada en la base de datos. El lenguaje SQL cuando se encuentra con una división por cero, ésta retorna un valor Null. Quedando de este modo solucionado el problema de dividir por cero.

2. “1,1 <ENTER> 1,2 <ENTER> 1,3” ->[Proceso]->”Error”
    Para esta situación, el análisis matemático hace evidente que la ecuación de la recta no está dada en la forma y=ax+b, puesto que el x es constante. Esta ecuación será dada por X=1, para todo Y. Acá se presenta nuevamente una división por cero, tanto para la ecuación de obtención de “a” como para la obtención de R2. Nuevamente no es necesaria una solución por el programador de las aplicaciones, puesto que SQL se encarga de dar respuesta con un Null.

3. “1,8 <ENTER> 3,8 <ENTER> 7,8” ->[Proceso]->”Error”
    Al igual que el caso anterior tenemos una recta con una pendiente complicada, tal es el caso de pendiente cero. Es simplemente una recta paralela al eje x. Quedan Y=8, para todo X. Este tipo de caso presenta problemas en la obtención de R2, dado que convertirá al denominador de la ecuación en cero. No así en el caso de obtener “a” y “b”, pues si bien “a” es cero, “b” obtiene un valor que está dado en la igualdad de todos los puntos “y”, para este caso 8. Nuevamente el programador está a salvo pues SQL se encarga de asignar un NULL en el cálculo de R2.

4. “1,1 <ENTER> 1,1 <ENTER> 1,1” ->[Proceso]->”Error”
Este caso viene a ser la conjunción del 2 y del 3. Es evidente que matemáticamente se tendrán problemas para calcular “a”, porque se genera la división 0/0, luego como “b” se obtiene en función de “a”, también tendrá problemas desde el punto de vista matemático y finalmente R2, quedaría de la forma 0/(0*0). Para esto habiendo dado respuesta a los casos anteriores simplemente apoyándonos en la capacidad de SQL de retornar Null en las divisiones por cero, es notorio que se usará la misma metodología.

5. “2,4” ->[Proceso]-> “Ingresar más puntos”.
    Ahora este caso, si bien se mencionó anteriormente, Se debe ver desde el punto de vista de la programación. Al ser un solo punto, el promedio de ese punto será el mismo punto, por lo que en el cálculo de “a”, se generará una división por cero. SQL se encargará de retornar NULL, pero a nivel de programación para evitar este caso, simplemente se obiga el ingreso de más datos.

6. ...“2,a”... ->[Proceso]->”Dato no ingresado a la Base de Datos”
    Existe la posibilidad de realizar un ingreso erróneo, para esto simplemente las aplicaciones validan que el tipo de dato ingreso para cada par de coordenadas sea un dato número. De no ser numérico da el aviso de que el dato no fue ingresado, que en realidad está siendo validado antes de siquiera enviarlo.

7. ...“5,8” ->[Proceso]->”Desea Ingresar más Datos? (s/n)” “x” ->[Proceso]->”Desea Ingresar más Datos?(s/n)”
    Este caso es exclusivo del programa en consola. Con cada ingreso de datos, se le pregunta al usuario si desea ingresar más, para esto él puede dar por respuesta “s” o “n”. Si el usuario se equivoca, no se podría asumir ni “s” ni “n”, por lo que es prudente volver a preguntar hasta obtener una respuesta dentro de las 2 alternativas posibles.


Descripción de la Solución

    Para el diseño de la base de datos, se usarán solo dos tablas, una donde se almacenen los puntos y otra donde se almacenarán a, b y R2. La obtención de éstos valores será tarea de la Base de Datos y se realizará todo mediante vistas, ya que esta herramienta de SQL permite obtener valores sin necesidad de almacenarlos.


    El UML de la base de datos queda así:

Captura de pantalla 2011-12-10 a la(s) 3.05.49

Explicación:

    Está la tabla Parejas, que es donde son almacenados todos los pares de datos (x,y). Para la obtención de “a”, se crea una vista con el promedio de X y el promedio de Y, ésta vista es llamada por la vista “diferencia”, la cual resta cada valor de x con el promedio obtenido, lo mismo realiza para cada valor de y. Luego esta vista diferencia es llamada por Producto, la cual multiplica cada Diferencia de X con cada diferencia de Y. La vista Numerador se encarga de realizar la sumatoria de todos los valores de la vista Producto. Todo este camino genera el numerador de a en la siguiente ecuación:

Captura de pantalla 2011-12-10 a la(s) 3.06.00


    Para la construcción del denominador, realiza la sumatoria del atributo que corresponde a la Diferencia de X en la vista diferencia, al cuadrado. Luego vasta con realizar la vista que posea la división del numerador con denominador.

    Para obtener “b”, al estar en función de columnas ya creadas en las vistas, simplemente se llaman para ser operadas. Se necesita el Promedio de Y, obtenido en la Vista promedio, restar con el resultado entre la multiplicación de la columna a de la vista a, por la columna promedio de la vista promedio.

    Obtener R2, requiere de la creación de de 5 vistas más, las cuales siguen el mismo modo de operación que las vistas que generan a y b.

    De este modo, es posible realizar múltiples cálculos que no requieren almacenamiento de sus resultados, pues no son relevantes. Ya que al usuario final solo le interesa la obtención de la ecuación de la recta.



Desarrollo de la Solución en Java

    Al conocer que la aplicación solo requiere el ingreso de pares, su esquema de GUI es el siguiente:
Captura de pantalla 2011-12-10 a la(s) 3.06.08


    La aplicación GUI contará con 2 campos donde se pondrá cada valor X e Y respectivamente. El botón ingresar, al ser presionado sacará los datos de los campos, los validará como enteros y almacenará en un ArrayList. Este botón puede ser presionado tantos pares se deseen ingresar.

    El botón calcular permite llamar a las vistas que en la base de dato generan a,b y R2.



Interacción de Solución en Consola.

    Se pide el ingreso de X, luego de Y. Si uno de éstos no es un entero, retorna un error.


    Si el primer ingreso es correcto, ambos enteros, solicita inmediatamente el ingreso de un segundo par. De ahí en adelante preguntará posterior a cada par ingresado si desea ingresar más, de obtener una respuesta negativa, mostrará en consola el valor calculado de a, b y R2.




Diagrama de Actividad Solución Consola.

Captura de pantalla 2011-12-10 a la(s) 3.06.14

Captura de pantalla 2011-12-10 a la(s) 3.06.24

Captura de pantalla 2011-12-Fs10 a la(s) 3.06.40

Diagrama Actividad Solución GUI
Captura de pantalla 2011-12-10 a la(s) 3.06.47

Captura de pantalla 2011-12-10 a la(s) 3.06.52

Captura de pantalla 2011-12-10 a la(s) 3.06.58

Capturas Consola y GUI

Captura de pantalla 2011-12-10 a la(s) 3.07.21

Captura de pantalla 2011-12-10 a la(s) 3.07.31
Reflexión

    En la construcción de esta actividad para Cliente Servidor, tuve que abordar el problema bajo un marco de creatividad, puesto que el desarrollo de una interfaz gráfica requiere de analizar muchos factores, como es la ubicación de botones, tamaño de ventana, etc. 
    
    Además, cabe destacar los conocimientos adquiridos y aplicados para concretar la actividad.


Lo aprendido:


    Obtención de una Recta a partir de una nube de Puntos.
    Creación de una Aplicación por Consola que se conecta a una Base de Datos,
    Creación de una Aplicación con Interfaz gráfica que se conecta a una Base de Datos.
    Envío de Datos desde una Aplicación Java a una Base de Datos usando Lenguaje SQL formado en Java.


    Para dar solución al problema planteado nos vimos enfrentados a varias ideas, para cada idea modelamos una base de datos distinta, pero concordamos que no eran las más optimas. La implementación de Vistas por sobre creación de tablas permite a la base de datos no sobrecargar en peso por la acumulación de datos. Siendo las vistas simples operaciones por sobre datos ya existentes.


    En el aspecto de la implementación en Java, si bien el código que se debe aplicar no es sencillo, la principal dificultad radica en evaluar las posibilidades de desborde, que en gran medidas son los errores que puede cometer el usuario, siendo este tema el que se trató con mayor delicadeza en los programas. 

4 comentarios:

  1. Hola, Hoye donde podría descargar el código en java o en netbeans.. no se si lo puedas pasar, seria de mucha ayuda, porfa

    ResponderEliminar
  2. https://www.dropbox.com/sh/un66g0ix116tlhv/24MRogn0VY
    No olvides construir la base de datos señalada en el UML.

    ResponderEliminar
  3. podrias subir el proyecto completo bd y codigo en netbeans o si lo puedes pasar seria excelente jesli19@hotmail.com

    ResponderEliminar
  4. MGM Resorts Casino & Spa - MapyRO
    MapyRO Hotels and Casinos · 1. MGM Resorts 논산 출장샵 Atlantic 여수 출장마사지 City, 서귀포 출장샵 NJ 동두천 출장안마 08401 · 2. MGM Resorts Atlantic 충주 출장안마 City, NJ 08401 · 3. MGM Resorts Atlantic City, NJ 08401 · 4. MGM Resorts Atlantic City, NJ

    ResponderEliminar