Skip to content

Commit c8f89ac

Browse files
Written first version of relevant aspects #211
1 parent e7cb91a commit c8f89ac

File tree

8 files changed

+99
-12
lines changed

8 files changed

+99
-12
lines changed

docs/bibliografia.bib

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,4 +517,6 @@ @article{wu2018self
517517
publisher={Elsevier}
518518
}
519519

520-
@misc{SCRUMWIKI, title={Scrum (desarrollo de software)}, url={https://es.wikipedia.org/wiki/Scrum-(desarrollo-de-software)}, note={https://es.wikipedia.org/wiki/Scrum-(desarrollo-de-software)}, year={2022}}
520+
@misc{SCRUMWIKI, title={Scrum (desarrollo de software)}, url={https://es.wikipedia.org/wiki/Scrum-(desarrollo-de-software)}, note={https://es.wikipedia.org/wiki/Scrum-(desarrollo-de-software)}, year={2022}}
521+
522+
@misc{SKLEARNGUIDELINES, title={Scikit-Learn Coding guidelines}, url={https://scikit-learn.org/stable/developers/develop.html#coding-guidelines}, year={2022}, author={scikit-learn developers}}
506 KB
Loading

docs/memoria.pdf

377 KB
Binary file not shown.

docs/memoria.tex

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,30 @@
6565
\FloatBarrier
6666
}
6767

68-
\newcommand{\imagenflotante}[2]{
68+
\newcommand{\imagenRuta}[3]{
69+
\begin{figure}[!h]
70+
\centering
71+
\includegraphics[width=0.9\textwidth]{#1}
72+
\caption{#2}\label{fig:#3}
73+
\end{figure}
74+
\FloatBarrier
75+
}
76+
77+
\newcommand{\imagenFlotante}[3]{
6978
\begin{figure}%[!h]
7079
\centering
7180
\includegraphics[width=0.9\textwidth]{#1}
72-
\caption{#2}\label{fig:#1}
81+
\caption{#2}\label{fig:#3}
82+
\end{figure}
83+
}
84+
85+
\newcommand{\imagenAncho}[4]{
86+
\begin{figure}[H]
87+
\centering
88+
\includegraphics[width=#4\textwidth]{#1}
89+
\caption{#2}\label{fig:#3}
7390
\end{figure}
91+
\FloatBarrier
7492
}
7593

7694

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
11
\capitulo{2}{Objetivos del proyecto}
2+
Los principales objetivos del proyecto son cuatro:
23

3-
Este apartado explica de forma precisa y concisa cuales son los objetivos que se persiguen con la realización del proyecto. Se puede distinguir entre los objetivos marcados por los requisitos del software a construir y los objetivos de carácter técnico que plantea a la hora de llevar a la práctica el proyecto.
4+
\begin{enumerate}
5+
\item Diseño e implementación de una biblioteca con los algoritmos de selección de instancias más comunes en la literatura.
6+
\item Diseño e implementación de una biblioteca con una serie de algoritmos de aprendizaje semi-supervisado.
7+
\item Integración de las bibliotecas con la plataforma de \texttt{MLaaS} de la Universidad de Burgos (\texttt{UBUMLaaS}).
8+
\item Diseño y puesta en producción de la parte de administración de \texttt{UBUMLaaS}.
9+
\end{enumerate}
10+
11+
12+
El enfoque que se le debe dar a las bibliotecas, en adelante \texttt{IS-SSL}\footnote{\textit{Instance Selection - Semi-Supervised Learning.}}, tanto de selección de instancias como de aprendizaje semi-supervisado, deberá permitir de manera sencilla la inclusión o añadido de nuevos algoritmos en un futuro, no siendo necesaria realizar grandes refactorizaciones para ello. Mediante ello se obtendrá un producto escalable y con un mantenimiento relativamente sencillo.
13+
14+
\texttt{UBULMLaaS} fue un proyecto desarrollado por ADMIRABLE y se paralizó en 2019, por lo que necesitará una actualización de librerías, interfaz gráfica, seguridad y actualización de la base de datos; entre otras cosas. Independientemente de los cambios, debe primar la sencillez de uso que la aplicación, de forma que la curva de aprendizaje sea mínima.
15+
16+
\subsection{Objetivos técnicos}
17+
Además de lo anteriormente mencionado, el proyecto cuenta con una serie de objetivos técnicos que se pueden resumir en:
18+
\begin{itemize}
19+
\item Los algoritmos imeplementados en \texttt{IS-SSL} deberán seguir la guía de estilo de \textit{Scikit-Learn}~\cite{SKLEARNGUIDELINES}, permitiendo a la comunidad científica acostumbrada al uso de la mencionada biblioteca en \texttt{Python}, hacer uso de \texttt{IS-SSL} de igual manera.
20+
\item Los algoritmos deberán de ser validados de alguna manera, ya sea con la literatura o mediante pares, para asegurar un correcto funcionamiento.
21+
\item \texttt{UBUMLaaS} procederá a tener distintos tipos o categorías de usuarios, debiendo dejar <<la puerta abierta>> a nuevos tipos de usuarios en el futuro.
22+
\item \texttt{UBUMLaaS} podrá ser portado y desplegado sobre \textit{bare metal} o mediante contenedores de Docker en cualquier sistema compatible.
23+
\item \texttt{UBUMLaaS} debe mantener todas sus funcionalidades previas a este proyecto.
24+
\item \texttt{UBUMLaaS} mostrará estadísticas generadas en tiempo real, se deberá de sortear la problemática de la concurrencia de acceso a registros de la base de datos, así como ficheros temporales.
25+
\item \texttt{UBUMLaaS} posee su propia API REST escrita en Python y emplea el \textit{framework web} Flask. No se deberá sobrecargar su uso, la carga de trabajo deberá estar balanceada entre cliente y servidor.
26+
\end{itemize}

docs/tex/3_Conceptos_teoricos.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
El proyecto tiene una relación directa con la minería de datos y los conceptos que lo rodean.
44

55
\section{Aprendizaje automático (\textit{machine learning})}\label{sec:machine-learning}
6-
En~\cite{sanchez_2020} se define el aprendizaje automático (\textit{machine learning}) como una rama dentro del campo de la Inteligencia Artificial que proporciona a los sistemas la capacidad de aprender y mejorar de manera automática, a partir de la experiencia. Estos sistemas transforman los datos en información, y con esta información pueden tomar decisiones. Este tipo de modelos se crean a base del uso masivo de datos. Cuando se dispone de los datos suficientes para entrenar un modelo comienza el proceso de aprendizaje. El objetivo de este aprendizaje es descubrir patrones ocultos en los datos. En muchas ocasiones el resultado del aprendizaje, el modelo, es una función que dadas unos datos de entrada clasifica o predice correctamente una salida. Como se puede ver en la Figura~\ref{fig:../img/memoria/Machine-learning-overview.pdf} el aprendizaje automático, \textit{machine learning}, posee diferentes aproximaciones, siendo la interfaz diferenciadora entre ellas la forma de uso de las instancias.
7-
\imagenflotante{../img/memoria/Machine-learning-overview.pdf}{\textit{Machine learning overview}~\cite{technovert_2020}}
6+
En~\cite{sanchez_2020} se define el aprendizaje automático (\textit{machine learning}) como una rama dentro del campo de la Inteligencia Artificial que proporciona a los sistemas la capacidad de aprender y mejorar de manera automática, a partir de la experiencia. Estos sistemas transforman los datos en información, y con esta información pueden tomar decisiones. Este tipo de modelos se crean a base del uso masivo de datos. Cuando se dispone de los datos suficientes para entrenar un modelo comienza el proceso de aprendizaje. El objetivo de este aprendizaje es descubrir patrones ocultos en los datos. En muchas ocasiones el resultado del aprendizaje, el modelo, es una función que dadas unos datos de entrada clasifica o predice correctamente una salida. Como se puede ver en la Figura~\ref{fig:Machine-learning-overview} el aprendizaje automático, \textit{machine learning}, posee diferentes aproximaciones, siendo la interfaz diferenciadora entre ellas la forma de uso de las instancias.
7+
\imagenFlotante{../img/memoria/Machine-learning-overview.pdf}{\textit{Machine learning overview}~\cite{technovert_2020}}{Machine-learning-overview}
88

99
\subsection{Aprendizaje supervisado}\label{subsec:Aprendizaje-Supervisado}
1010
El aprendizaje automático puede ser resumido como <<aprender de ejemplos>>. Al programa se le proporcionan dos conjuntos de datos, uno de entrenamiento y otro de validación~\cite{learned2014introduction}. El objetivo es simple, debe de <<aprender>> en función del conjunto de datos etiquetado proporcionado como entrenamiento para posteriormente identificar las correspondientes etiqueta/s de cada instancia del conjunto de validación con la mayor precisión posible.

docs/tex/4_Tecnicas_y_herramientas.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
\section{Técnicas}\label{sec:tecnicas}
66

7-
\subsection{Metodología SCRUM}
7+
\subsection{Metodología SCRUM}\label{SCRUM}
88
\textit{Scrum} es un marco de trabajo que permite el trabajo colaborativo en equipos. Permite que los equipos que trabajan en proyectos con esta metodología se organicen por sí mismos, siendo ellos los que deciden cómo afrontar los problemas que van surgiendo.
99

1010
Según \cite{cervone2011understanding}, el modelo \textit{Scrum} se basa en tres componentes principales: roles, procesos y artefactos. El \textit{Scrum Master} es el puesto asumido por el director o gerente del proyecto, o en algunos casos el líder del equipo. Esta figura representa los valores y principios por los que se rige la metodología de \textit{scrum}, manteniendo los valores y buenas prácticas, así como resolviendo los impedimentos que vayan surgiendo a lo largo del desarrollo del proyecto. Habitualmente los equipos están compuestos por entre cinco y diez personas que trabajan en el proyecto a tiempo completo. Siendo este equipo independiente y flexible en cuanto a jerarquía interna, no siendo representado el papel del <<jefe>> dentro de este por la misma persona siempre. Esto genera que el papel cambie en función de las necesidades del propio proyecto, la configuración del equipo cambia únicamente entre iteraciones, o \textit{sprints}, no dentro de los mismos.
Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,51 @@
11
\capitulo{5}{Aspectos relevantes del desarrollo del proyecto}
22

3-
Este apartado pretende recoger los aspectos más interesantes del desarrollo del proyecto, comentados por los autores del mismo.
4-
Debe incluir desde la exposición del ciclo de vida utilizado, hasta los detalles de mayor relevancia de las fases de análisis, diseño e implementación.
5-
Se busca que no sea una mera operación de copiar y pegar diagramas y extractos del código fuente, sino que realmente se justifiquen los caminos de solución que se han tomado, especialmente aquellos que no sean triviales.
6-
Puede ser el lugar más adecuado para documentar los aspectos más interesantes del diseño y de la implementación, con un mayor hincapié en aspectos tales como el tipo de arquitectura elegido, los índices de las tablas de la base de datos, normalización y desnormalización, distribución en ficheros3, reglas de negocio dentro de las bases de datos (EDVHV GH GDWRV DFWLYDV), aspectos de desarrollo relacionados con el WWW...
7-
Este apartado, debe convertirse en el resumen de la experiencia práctica del proyecto, y por sí mismo justifica que la memoria se convierta en un documento útil, fuente de referencia para los autores, los tutores y futuros alumnos.
3+
En esta sección se van a detallar los aspectos más relevantes que han ido surgiendo a lo largo del desarrollo del proyecto. Este a sido un desarrollo \textit{software} y como tal ha estado lleno de retos y decisiones técnicas que han tenido que ir tomándose. La formación ha sido un punto de inflexión, sumado a la aplicación de buenas prácticas, ha resultado en un producto de calidad.
4+
5+
6+
\subsection{Investigación}
7+
Uno de los componentes principales que posee el proyecto es el apartado de investigación en el campo del Aprendizaje Automático, concretando un poco más, el efecto de la aplicación de técnicas de selección de instancias en el aprendizaje semi-supervisado.
8+
9+
Uno de los principales retos enfrentados en una primera instancia ha sido adquirir una rápida capacidad de lectura y asimilación de documentación científica, si bien el idioma (inglés) no ha supuesto una barrera, el no poseer experiencia en realizando estas tareas generó una necesidad que tuvo que ser solventada poco a poco. En los últimos meses del proyecto la agilidad ya estaba ahí, resultando en tareas más fluidas y veloces.
10+
11+
\subsection{Metodología SCRUM}
12+
Como ya se mencionó en la Sección~\ref{SCRUM}, el proyecto se ha realizado siguiendo una metodología ágil, permitiendo trabajar en \textit{sprints} de manera que el trabajo de cada \textit{sprint} se encuentre correctamente fundamentado al inicio de cada uno, permitiendo trabajar con una mayor eficiencia, priorizar el trabajo en función las tareas existentes, y disponer de versiones funcionales a la vez que se sigue con el desarrollo del proyecto.
13+
14+
Si bien se conocía SCRUM de manera puramente teórica, el haber trabajado siguiendo esta metodología ha permitido ganar experiencia en modelos de desarrollo ágiles, diferente de los clásicos a los que se acostumbraba, y tal y como se define, el trabajo se ha visto afectado de forma positiva con esta aproximación.
15+
16+
Se disponían de cerca de 9 meses (máximo) para cumplimentar el proyecto, un tiempo mucho más elevado del habitual para este tipo de proyectos, es por ello que se han invertido múltiples \textit{sprints} para validación y calidad, permitiendo asegurar que los pasos dados son correctos y seguir construyendo sobre seguro.
17+
18+
Una de las principales dificultades encontradas en este campo es la asignación de puntos de historia, el definir en base a un nombre de tarea y una descripción el tiempo que va a ser necesario invertir para cumplir con ella no ha sido siempre muy preciso. El no poseer experiencia previa en proyectos de esta envergadura propició que se considerara la equivalencia de 1 punto de historia igual a 45 minutos o menos. Y si bien ha habido múltiples \textit{sprints} en los cuales se ha conseguido seguir esta relación, no ha sido algo lineal en el proyecto, debido a que se tuvo en cuenta la experiencia que se iba consiguiendo a la hora de asignar los siguientes puntos de historia, y ha habido múltiples \textit{sprints} desfasados por lo alto.
19+
20+
\subsection{Actualización y modificación de un \textit{software} pre-existente}
21+
Posiblemente será el aspecto relevante más cercano a el futuro laboral de cualquier alumno. Supuso todo un reto el coger un proyecto que había sido desarrollado por 5 personas y <<hacerlo propio>>. Como es lógico cada persona programa de una forma diferente para alcanzar la misma funcionalidad, y ya no solo eso, sino la propia temática del proyecto era desconocida, por lo tanto supuso un esfuerzo doble.
22+
23+
La no existencia de una documentación, ni técnica ni formal, acerca del propio \textit{software} no ayudó a obtener una visión del proyecto más allá de la estructura de paquetes y nombres. Fue algo que se echó en falta, y que con la finalización de este proyecto, ya posee.
24+
25+
\subsection{Desarrollo Web}
26+
A lo largo del Grado no se ha visto nada en cuanto a desarrollo web se refiere, siendo toda una desventaja a la hora de actualizar y modificar \texttt{UBUMLaaS}. Trabajar con una REST API era algo hasta enero desconocido, y la curva de aprendizaje no ha sido especialmente sencilla, han sido necesarias numerosas horas para familiarizarse tanto con el proyecto como con la forma de trabajo que poseen las aplicaciones que siguen esta arquitectura.
27+
28+
A la hora de integrar nuevas modificaciones sobre el \textit{backend} del proyecto no supuso grandes problemas, fue un trabajo laborioso como es de esperar, pero al ser Python ya se estaba acostumbrado al lenguaje de programación. La dificultad llegó con el \textit{frontend} lenguajes de marcas como HTML o CSS, y de programación como JavaScript, no eran desconocidos, pero no se habían utilizado nunca en grandes proyectos; es por ello que hubo tareas que se vieron retrasadas.
29+
30+
Destacar que como ha sido la tónica general del proyecto y así queda recogido en el resumen de numerosos \textit{sprints} en su anexo correspondiente. En cuanto el equipo de desarrollo se familiarizaba con el lenguaje y entorno de aplicación, la velocidad de implementación de funcionalidades crecía de forma exponencial.
31+
32+
La web ha sufrido una renovación por completa, siendo necesario re-escribir todos los documentos HTML, si bien se tuvo desde un inicio en cuenta que ciertas páginas tuvieran un diseño similar al que ya poseían anteriormente para seguir con el diseño inicial. El nuevo diseño soporta múltiples resoluciones de pantalla, habiendo sido priorizadas aquellas soportadas en tabletas sobre las de dispositivos móviles.
33+
34+
\subsubsection{Funcionalidades <<sobre la marcha>>}
35+
En el momento de desarrollo de la parte de administración de \texttt{UBUMLaaS} surgían cada día nuevas funcionalidades que parecían correctas o adecuadas para implementar y añadir, permitiendo a los administradores tener más control del que iban a poseer una vez pase a producción la versión creada.
36+
37+
Muchas de estas nuevas funcionalidades se han llevado a cabo y se encuentran disponibles y completamente integradas con la plataforma, si bien muchas otras no, se han quedado como trabajos futuros. Aquellas que se han quedado sin implementar fueron clasificadas con una relevancia baja, siendo priorizadas aquellas que se consideraron más útiles o curiosas.
38+
39+
\subsection{PIP}
40+
\texttt{IS-SSL} es una biblioteca desarrollada con la finalidad de que sea útil a la mayor cantidad de desarrolladores posible, siguiendo las directrices del \textit{Open Source}, es por ello que se encuentra disponible a través del gestor de paquetes de Python, PIP.
41+
42+
El proyecto también puede ser descargado directamente desde el repositorio de GitHub y realizar todas las instalaciones de dependencias necesarias a través del fichero de \textit{requeriments.txt} o creando un entorno de \texttt{Conda} (a través del fichero \textit{is-ssl.yml}).
43+
44+
\subsection{Docker}
45+
\texttt{UBUMLaaS} se encuentra desplegado en la Universidad de Burgos sobre un servidor directamente, pero con el fin de permitir que se despliegue en cualquier equipo y que la configuración específica sea mínima, se ha creado un contenedor Docker en el cuál reside la última versión de la aplicación.
46+
47+
El futuro de la aplicación podría ser únicamente en Docker perfectamente, siendo mucho más sencillo desplegarla en diferentes servidores, pero en la actualidad ese no es el enfoque deseado, por lo que se dejó para hacer al final en caso de que sobrara tiempo, como ha sucedido.
48+
49+
50+
\subsection{Experimentación de filtros de ruido para aprendizaje semi-supervisado}
51+
\imagenFlotante{../img/memoria/aspectos-relevantes/General}{Resumen en función del clasificador y filtro}{exp-general}

0 commit comments

Comments
 (0)