In[]:=
GridImage[#,ImageSize->{Automatic,100}]&/@
,

Out[]=

TEXAS TECH GIRLS HACKATHON 2025

Reporte del equipo EVA
Integrantes: Ariana Arce Méndez, Estefanía Vega Mejías y Victoria García Montenegro
Tutor asignado: Gabriel Arturo Alfaro Ulate
Introducción
La inteligencia artificial es una herramienta que se puede utilizar en diversidad de campos, desde los asistentes digitales, edición de imágenes y videos hasta áreas consideradas más complicadas, como la predicción del clima, creación del arte y predicción de diagnósticos. De forma que la programación detrás de la inteligencia artificial aunque sea la más sencilla, lo es todo, por esto, la selección del lenguaje de programación es esencial para cumplir con el objetivo planteado (UNIE Universidad, 2024). En este caso, el lenguaje de Wolfram se caracteriza por funcionar de forma distinta y retar a sus usuarios a pensar fuera de lo esperado, no obstante, esto no lo hace complicado, si no, permite programar más allá de lo común. Mediante el conocimiento de sus funciones y la ayuda del Notebook Assistant, códigos que en otro lenguaje necesitarían un programa confuso, especializado y extenso, se condensa por la variedad de funciones y la facilidad de su uso. Debido a esto, las posibilidades se expanden permitiendo a estudiantes experimentar y aportar en la predicción de cáncer por medio de un programa sencillo de entender. El lenguaje de Wolfram, Wolfram Alpha Pro, Wolfram Mathematica y el Notebook Assistant permiten crear un programa con un alto grado de confiabilidad al poder entrenarlo enviándole diversa cantidad de imágenes para que sea posible que pueda catalogar las imágenes como positivas o negativas para cáncer, obteniendo resultados rápidos, eficientes y exactos. Además, brinda estadísticas específicas que indican todo lo que ha aprendido el programa mediante el entrenamiento, haciendo posible la mejora constante y veracidad sobre los datos obtenidos. Según el Ministerio de Salud de Costa Rica, en 2023 se registraron cerca de 6000 fallecimientos por cáncer, siendo el cáncer de mama el más común en mujeres. Las muertes registradas por cáncer de mama en Costa Rica anualmente son mayores a 390 por año (durante los últimos 5 años), además, los mismos afirman que una forma de mejorar esta cifra es con la salud preventiva (Ministerio de Salud de Costa Rica, 2025; Ministerio de Salud de Costa Rica, 2024). La tasa de supervivencia de las personas a las que se les detecta el cáncer de mama en etapa inicial es superior al 99% en 5 años, contrario a la tasa de supervivencia del cáncer metastásico, la cual es del 38%; evidenciando la importancia de la detección temprana de cáncer de mama y su control, ya que este permite que si el cáncer reincide, se trate nuevamente antes de que avance y disminuya la esperanza de vida (Novartis, 2022).
Desarrollo

Desafío 1

Es crucial puntualizar que el nombre de los archivos para que las funciones hagan su trabajo es significativo, por lo tanto, dependiendo del dispositivo se debe de modificar este aspecto. El código brindado (ya escrito en el Notebook) al no estar especificado el directorio, se presentan fallas como el no encontrar los archivos. Así que se optó por revisar específicamente cada directorio hacia cuáles archivos se dirigía. Además, se siguieron las indicaciones del Notebook, lo que permitió el funcionamiento de este. A continuación se encuentra una descripción detallada. Cada instrucción generó un output específico que confirma que los pasos se ejecutaron de manera correcta. En el establecimiento del directorio de trabajo, el sistema devuelve la ruta donde se encuentra ubicado el Notebook. Esto para que todos los archivos que se carguen se manejen dentro de esta carpeta. La verificación del directorio confirma que se estableció correctamente y está listo para cargar datos. El output de la creación de la ruta hacia la carpeta de imágenes, muestra la ruta exacta donde se encuentran las de imágenes que usa el modelo. Para la carga de todas las imágenes del Datasets, se usó la función FileNames que busca todas las imágenes con extensión “.jpg “dentro del folder Datasets gracias a Infinity. El valor “20667” indica la cantidad total de imágenes encontradas. De las imágenes clasificadas como “No cáncer”, aquí se accede específicamente al folder que contiene mamografías sin evidencia de cáncer. El output confirma que hay 620 imágenes esta categoría. Y de las clasificadas como “Cáncer”, el output muestra que existen 125 imágenes clasificadas.
In[]:=
SetDirectory[NotebookDirectory[]]
Out[]=
C:\Users\galfa\Downloads
In[]:=
Directory[]
Out[]=
C:\Users\galfa\Downloads
In[]:=
ImgsFolder=Directory[]<>"\\Datasets"
Out[]=
C:\Users\galfa\Downloads\Datasets
In[]:=
images=FileNames["*jpg",ImgsFolder,Infinity];
In[]:=
Length[images]
Out[]=
20667
In[]:=
FolderNoC="Datasets\\Breast Cancer Dataset\\Original Dataset\\Non-Cancer";
In[]:=
ImgsNoC=FileNames["*jpg",FolderNoC,Infinity];
In[]:=
Length[ImgsNoC]
Out[]=
620
In[]:=
FolderYesC="Datasets\\Breast Cancer Dataset\\Original Dataset\\Cancer";ImgsYesC=FileNames["*jpg",FolderYesC,Infinity];
In[]:=
Length[ImgsYesC]
Out[]=
125

Desafío 2

Para este desafío había que corregir un código ya creado por el staff del Hackathon, el cual se presenta a continuación:
(* This code snippet is broken, try to fix it *)​​trainingCancerData = Map[ColorConvert[ImageResize[Import[#],600],"Grayscale"],RandomSample[examImagesCancer,100]];​​trainingNoCancerData = ColorConvert[ImageResize[Import[#],600],"Grayscale"]&/@RandomSample[examImagesNoCancer 100];
En el código brindado, en la primera línea no está aplicada la función anónima a algún dato existente, lo que generaba un error, en la segunda línea no se presenta la función “Map” al inicio, provocando que la aplicación de la función solo lo aplique a una imagen, no a todas las requeridas, además, hay un Syntax error, por la falta de una coma antes del “100”, por lo que el “100” era irrelevante para la función, como si este no estuviera escrito.En otras palabras, la modificación realizada constó: en la primera especificar el archivo al que se le aplica la función anónima, en este caso, el conjunto de imágenes con el que posteriormente se irá a entrenar el programa para la detección de cáncer; en la segunda línea se agregó la función “Map” con su respectiva escritura englobando toda la línea escrita en el código anterior, finalmente, se adiciona la función “Length” aplicada a esta línea. A continuación se encuentra una descripción detallada. El código original tenía tres errores principales. La función anónima no tenía el símbolo &, por lo que no estaba asignada a ningún parámetro. En la segunda línea faltaba Map, impidiendo que la función se aplicara a cada imagen y faltaba una coma lo que hacía que el código fuera inválido. Adicionalmente, se decidió agregar un filtro de claridad para mejorar el contraste de las mamografías. La función “Length” devuelve la cantidad total de elementos contenidos en la variable “trainingCancerData”. El resultado “120” indica que se seleccionaron y procesaron 120 imágenes de cáncer. El conjunto de imágenes sin cáncer (trainingNoCancerData) también contiene 120 elementos, lo cual demuestra que se balancearon ambas clases.
In[]:=
trainingNoCancerData=Map[ImageAdjust[ColorConvert[ImageResize[Import[#],600],"Grayscale"],{0,0.4}]&,RandomSample[ImgsNoC,120]];​​trainingCancerData=Map[ImageAdjust[ColorConvert[ImageResize[Import[#],600],"Grayscale"],{0,0.4}]&,RandomSample[ImgsYesC,120]];​​Length[trainingCancerData]
Out[]=
120
In[]:=
Length[trainingNoCancerData]
Out[]=
120

Desafío 3

Para este desafío se le proveyó al equipo una pista del código a utilizar, la cual se presenta a continuación:
(* Complete the code to create a classifier *)​​cancerClassify= Classify[<|...
El código brindado se encuentra incompleto, sin embargo, no posee errores, por lo que nos dedicamos a su edición. Con el código modificado en el reto 2, se clasificó mediante la función “Classify” con una regla que indica la detección de cáncer, siendo así que a la primera línea se le denominó como “Cancer” y a la segunda, “No cancer”, para entrenar el modelo con las imágenes brindadas con anterioridad por el personal, lo que brindó la información (estadísticas), como la exactitud, cantidad de ejemplos, curva de aprendizaje, entre otros. Seguidamente, con la imagen obtenida mediante link (importada dentro del código) para poder enviársela al modelo, así el modelo calculó las probabilidades de que la imagen mostrara positivo o negativo para cáncer, luego, se hizo una gráfica de pastel con las probabilidades obtenidas, finalmente se utilizó la función “Information” que proporciona las estadísticas actualizadas. A continuación se encuentra una descripción detallada. Se probaron tres métodos diferentes de inteligencia artificial para analizar las imágenes. De los tres, el que funcionó mejor fue el de Regresión logística , que fue el que el sistema escogió automáticamente como el más adecuado. Logró una precisión del 93%, y lo más importante es que funcionó igual de bien detectando tanto los casos con cáncer como los sin cáncer. Y es un programa muy rápido, ya que analiza una imagen en apenas 41 milisegundos y puede procesar 257 imágenes por segundo. El modelo de árbol de decisión, alcanzó una precisión del 90.83%, demostrando su efectividad en la identificación de patrones, aunque con cierta propensión al sobreajuste debido al tamaño limitado del conjunto de datos. El modelo de Random Forest mostró una precisión del 87.08%, con esto demostró ser un modelo robusto a pesar de que su rendimiento se vio limitado por el tamaño de la muestra. ​
In[]:=
CancerClassify0=Classify[<|"Cancer"->trainingCancerData,"No cancer"->trainingNoCancerData|>]
Out[]=
ClassifierFunction
Input type: Image
Classes: Cancer,No cancer
Method: LogisticRegression
Number of training examples: 240
Data not saved. Save now

In[]:=
RandomChoice[trainingNoCancerData]
Out[]=
In[]:=
CancerClassify0

Out[]=
No cancer
In[]:=
Information[CancerClassify0]
Out[]=
Classifier information
Data type
Image
Classes
Cancer
,
No cancer
Accuracy
(93.±5.)
%
Method
LogisticRegression
Single evaluation time
41.1
ms/example
Batch evaluation speed
257.
examples/s
Loss
0.353 ± 0.095
Model memory
130.
MB
Training examples used
240
examples
Training time
4.77
s

Desafío 4

Puntos Extra

Para puntos extra se especificaron varios desafíos adicionales, los cuales se presentan a continuación:

Primer punto extra

El código completo para esta parte quedó de la siguiente manera:

Segundo punto extra

Tercer punto extra: una sección para justificar el impacto de estas herramientas

Cuarto punto extra

Conclusiones
Referencias bibliográficas
Ministerio de Salud de Costa Rica (2025). Día mundial de la lucha contra el cáncer. Salud recuerda la importancia de prevención y atención temprana para diagnóstico de cáncer en el país. Obtenido de: https://www.ministeriodesalud.go.cr/index.php/prensa/62-noticias-2025/2054-salud-recuerda-la-importancia-de-prevencion-y-atencion-temprana-para-diagnostico-de-cancer-en-el-pais
Ministerio de Salud de Costa Rica (2024). Fallecimientos por cáncer de mama en edad prematura disminuyó un 0.86% en el 2023. Obtenido de: https://www.ministeriodesalud.go.cr/index.php/prensa/61-noticias-2024/1972-fallecimientos-por-cancer-de-mama-en-edad-prematura-disminuyo-un-0-86-en-el-2023
Novartis (2022). La supervivencia tras el diagnóstico de cáncer de mama temprano y metastásico. Obtenido de: https://www.novartis.com/es-es/stories/la-supervivencia-tras-el-diagnostico-de-cancer-de-mama-temprano-y-metastasico
UNIE Universidad (2024). Principales usos de la IA en nuestra vida diaria. Obtenido de: https://www.universidadunie.com/blog/usos-ia-vida-cotidiana
Wolfram Research, Inc., Wolfram|Alpha Notebook Edition, Champaign, IL (2025).