library(readxl)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(stringr)
library(tidyr)
library(mice)
##
## Adjuntando el paquete: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
library(VIM)
## Cargando paquete requerido: colorspace
## Cargando paquete requerido: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Adjuntando el paquete: 'VIM'
## The following object is masked from 'package:datasets':
##
## sleep
library(magrittr)
##
## Adjuntando el paquete: 'magrittr'
## The following object is masked from 'package:tidyr':
##
## extract
library(Amelia)
## Cargando paquete requerido: Rcpp
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
#En los últimos años, la Inteligencia Artificial ha ganado relevancia en una amplia variedad de campos, desde la automatización de procesos hasta la toma de decisiones estratégicas en negocios. El análisis de datos juega un papel crucial en el desarrollo de algoritmos de IA efectivos. Tanto las métricas de rendimiento, como la precisión, y el tiempo de entrenamiento, son esenciales para determinar el balance entre la calidad del modelo y la eficiencia computacional, permitiendo así identificar patrones que optimizan los resultados.
#A través de un análisis exploratorio de datos, es posible identificar patrones claves que ayudan a optimizar la elección de algoritmos según el tipo de problema y los recursos disponibles.
#Es fundamental realizar este análisis para de esta forma lograr entender las características claves de los datos, identificar posibles sesgos y encontrar una respuesta para esa pregunta formulada apartir de los datos suministrados; ¿Qué algoritmo de IA ofrece una mejor precisión al momento de utilizar datos de Imagen en el entrenamiento del modelo?.
BaseIA <- read_excel("Dataset_IA_corte_II.xlsx")
View(BaseIA)
BaseIA2 <- BaseIA %>% separate(col = Date, into = c("Fecha", "Hora"), sep = " ")
View(BaseIA2)
dim(BaseIA2) #dimensiones de la base
## [1] 560 11
names(BaseIA2) #nombres de las columnas (variables)
## [1] "Algorithm" "Framework" "Problem_Type" "Dataset_Type"
## [5] "Accuracy" "Precision" "Recall" "F1_Score"
## [9] "Training_Time" "Fecha" "Hora"
head(BaseIA2) #visualizamos los primeros datos de la base para comprender como se distribuyen
## # A tibble: 6 × 11
## Algorithm Framework Problem_Type Dataset_Type Accuracy Precision Recall
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 SVM Scikit-lea… Regression Time Series 0.662 0.693 NA
## 2 K-Means Keras Clustering Time Series 0.744 0.490 0.877
## 3 Neural Network Keras Clustering Image 0.885 0.595 0.969
## 4 SVM Keras Clustering Text 0.842 0.842 0.875
## 5 SVM Scikit-lea… Regression Tabular 0.723 0.686 0.301
## 6 K-Means PyTorch Regression Image 0.637 0.626 7.45
## # ℹ 4 more variables: F1_Score <dbl>, Training_Time <dbl>, Fecha <chr>,
## # Hora <chr>
tail(BaseIA2) #visualizamos los últimos datos de la base para comprender como se distribuyen
## # A tibble: 6 × 11
## Algorithm Framework Problem_Type Dataset_Type Accuracy Precision Recall
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 Neural Network Keras Classificati… Image 0.744 0.637 0.443
## 2 K-Means Keras Regression Time Series 0.555 0.653 0.714
## 3 K-Means Keras Regression Tabular 0.774 0.647 0.430
## 4 Random Forest TensorFlow Clustering Image 0.727 NA 0.532
## 5 K-Means TensorFlow Regression Tabular 0.922 0.828 0.899
## 6 Random Forest PyTorch Clustering Image 0.549 0.765 0.445
## # ℹ 4 more variables: F1_Score <dbl>, Training_Time <dbl>, Fecha <chr>,
## # Hora <chr>
str(BaseIA2) #conocemos los tipos de datos en cada variable
## tibble [560 × 11] (S3: tbl_df/tbl/data.frame)
## $ Algorithm : chr [1:560] "SVM" "K-Means" "Neural Network" "SVM" ...
## $ Framework : chr [1:560] "Scikit-learn" "Keras" "Keras" "Keras" ...
## $ Problem_Type : chr [1:560] "Regression" "Clustering" "Clustering" "Clustering" ...
## $ Dataset_Type : chr [1:560] "Time Series" "Time Series" "Image" "Text" ...
## $ Accuracy : num [1:560] 0.662 0.744 0.885 0.842 0.723 ...
## $ Precision : num [1:560] 0.693 0.49 0.595 0.842 0.686 ...
## $ Recall : num [1:560] NA 0.877 0.969 0.875 0.301 ...
## $ F1_Score : num [1:560] 0.443 0.441 0.964 0.704 0.646 ...
## $ Training_Time: num [1:560] 4.98 NA 3.28 4.04 3.6 ...
## $ Fecha : chr [1:560] "2023-03-08" "2023-03-09" "2023-03-10" "2023-03-11" ...
## $ Hora : chr [1:560] "11:26:21.08" "11:26:21.08" "11:26:21.08" "11:26:21.08" ...
#variables_cuantitativas= (Accuracy, Precision, Recall, F1_Score, Training_Time, Fecha, Hora)
#variables_cualitativas= (Algorithm, Framework, Problem_Type, Dataset_Type)
str_view(BaseIA2$Framework, "ar")
## [1] │ Scikit-le<ar>n
## [5] │ Scikit-le<ar>n
## [8] │ Scikit-le<ar>n
## [23] │ Scikit-le<ar>n
## [29] │ Scikit-le<ar>n
## [32] │ Scikit-le<ar>n
## [34] │ Scikit-le<ar>n
## [35] │ Scikit-le<ar>n
## [36] │ Scikit-le<ar>n
## [39] │ Scikit-le<ar>n
## [42] │ Scikit-le<ar>n
## [43] │ Scikit-le<ar>n
## [48] │ Scikit-le<ar>n
## [49] │ Scikit-le<ar>n
## [50] │ Scikit-le<ar>n
## [53] │ Scikit-le<ar>n
## [58] │ Scikit-le<ar>n
## [61] │ Scikit-le<ar>n
## [72] │ Scikit-le<ar>n
## [80] │ Scikit-le<ar>n
## ... and 114 more
str_detect(BaseIA2$Dataset_Type, "T")
## [1] TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE
## [13] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [25] TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE
## [37] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE
## [49] FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE
## [61] FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [73] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [85] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [97] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [109] TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE
## [121] FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
## [133] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [145] TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
## [157] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
## [169] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE
## [193] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [205] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [217] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE
## [229] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE
## [241] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [253] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [265] TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
## [277] TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE
## [289] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [301] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
## [313] TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [325] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [337] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
## [349] FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
## [361] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [373] TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
## [385] TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [397] FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [409] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
## [421] TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE
## [433] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
## [445] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE
## [457] TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [469] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [481] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [493] TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [505] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [517] TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [529] TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE
## [541] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [553] TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
#Realizamos diagramas de normalidad para realizar el respectivo resumen de cada variable cuantitativa
hist(BaseIA$Accuracy, xlab = "Datos Accuracy", ylab = "Frecuencia", col = "blue")

#no presenta normalidad
subset(BaseIA, Accuracy > 1) #aquí se observan datos atípicos
## # A tibble: 10 × 10
## Algorithm Framework Problem_Type Dataset_Type Accuracy Precision Recall
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 Random Forest PyTorch Regression Text 9.72 0.782 0.548
## 2 K-Means TensorFlow Classificat… Image 5.93 NA 0.399
## 3 Random Forest Keras Clustering Text 8.53 0.837 NA
## 4 Neural Network PyTorch Regression Time Series 5.26 0.506 0.829
## 5 K-Means TensorFlow Regression Tabular 7.13 0.521 0.441
## 6 SVM Scikit-le… Regression Tabular 5.20 0.489 0.680
## 7 SVM TensorFlow Classificat… Image 8.29 0.798 0.753
## 8 Random Forest PyTorch Clustering Tabular 7.90 0.521 0.363
## 9 SVM Scikit-le… Regression Tabular 5.98 0.928 0.799
## 10 SVM PyTorch Classificat… Image 9.49 0.671 0.833
## # ℹ 3 more variables: F1_Score <dbl>, Training_Time <dbl>, Date <dttm>
#Realizamos diagramas de normalidad para realizar el respectivo resumen de cada variable cuantitativa
hist(BaseIA$Precision, xlab = "Datos Accuracy", ylab = "Frecuencia", col = "blue")

#no presenta normalidad, cuenta con datos atípicos
subset(BaseIA, Precision > 1) #aquí se observan datos atípicos
## # A tibble: 10 × 10
## Algorithm Framework Problem_Type Dataset_Type Accuracy Precision Recall
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 SVM PyTorch Regression Image 0.897 9.73 0.781
## 2 SVM Scikit-le… Classificat… Image 0.591 4.06 0.482
## 3 K-Means TensorFlow Clustering Time Series 0.686 6.21 0.328
## 4 K-Means Scikit-le… Classificat… Time Series 0.603 4.15 7.74
## 5 Neural Network Keras Clustering Text 0.537 9.67 0.819
## 6 SVM TensorFlow Classificat… Image 0.824 5.43 0.976
## 7 Random Forest TensorFlow Regression Text 0.902 8.93 0.603
## 8 SVM PyTorch Clustering Text 0.584 4.08 0.717
## 9 SVM Keras Regression Text 0.506 5.76 0.707
## 10 K-Means PyTorch Regression Tabular 0.768 7.04 0.926
## # ℹ 3 more variables: F1_Score <dbl>, Training_Time <dbl>, Date <dttm>
#La operacionalización de la variable Precision, la cual es centro de atención en este análisis exploratorio, será trabajada mediante un rango de medición de 0 a 1. Como pudimos ver, la Variable Precision cuenta con varios datos atípicos a los cuales se les deberá otorgar un tratamiento. De la misma manera, se le dará un tratamiento a los NA´S para tener unos datos en mejor estado y lograr un mejor estudio y análisis.
#Verificamos que existan NA´s
sapply(BaseIA2, function(x) sum(is.na(x)))
## Algorithm Framework Problem_Type Dataset_Type Accuracy
## 0 0 0 0 39
## Precision Recall F1_Score Training_Time Fecha
## 19 20 20 20 0
## Hora
## 0
#Observaremos la cantidad de NA´s que tenemos en nuestra base de datos
md.pattern(BaseIA2) #aquí se observan los faltantes por cada variable

## Algorithm Framework Problem_Type Dataset_Type Fecha Hora Precision Recall
## 448 1 1 1 1 1 1 1 1
## 39 1 1 1 1 1 1 1 1
## 16 1 1 1 1 1 1 1 1
## 17 1 1 1 1 1 1 1 1
## 2 1 1 1 1 1 1 1 1
## 18 1 1 1 1 1 1 1 0
## 1 1 1 1 1 1 1 1 0
## 16 1 1 1 1 1 1 0 1
## 1 1 1 1 1 1 1 0 1
## 1 1 1 1 1 1 1 0 1
## 1 1 1 1 1 1 1 0 0
## 0 0 0 0 0 0 19 20
## F1_Score Training_Time Accuracy
## 448 1 1 1 0
## 39 1 1 0 1
## 16 1 0 1 1
## 17 0 1 1 1
## 2 0 0 1 2
## 18 1 1 1 1
## 1 1 0 1 2
## 16 1 1 1 1
## 1 1 0 1 2
## 1 0 1 1 2
## 1 1 1 1 2
## 20 20 39 118
missmap(BaseIA2, col = c("red", "blue"), legend = TRUE) #acá observamos el porcentaje de faltantes en toda la base
## Warning: Unknown or uninitialised column: `arguments`.
## Unknown or uninitialised column: `arguments`.
## Warning: Unknown or uninitialised column: `imputations`.

# Decidimos realizar imputación por la mediana
imputacion <- with(BaseIA2, {
for (i in 1:ncol(BaseIA2)) {
# Verificamos si la columna es numérica
if (is.numeric(BaseIA2[, i])) {
if (any(is.na(BaseIA2[, i]))) {
# Imputación por mediana para columnas numéricas
BaseIA2[, i][is.na(BaseIA2[, i])] <- median(BaseIA2[, i], na.rm = TRUE)
}
}
}
return(BaseIA2)
})
# Verificamos la imputación
sapply(imputacion, function(x) sum(is.na(x)))
## Algorithm Framework Problem_Type Dataset_Type Accuracy
## 0 0 0 0 39
## Precision Recall F1_Score Training_Time Fecha
## 19 20 20 20 0
## Hora
## 0
#cargamos la base con su respectiva imputación de NA´s
View(imputacion)
#resumen estadístico inicial
summary(BaseIA2)
## Algorithm Framework Problem_Type Dataset_Type
## Length:560 Length:560 Length:560 Length:560
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Accuracy Precision Recall F1_Score
## Min. :0.5038 Min. :0.4019 Min. :0.3001 Min. :0.4000
## 1st Qu.:0.6236 1st Qu.:0.5632 1st Qu.:0.4819 1st Qu.:0.5515
## Median :0.7578 Median :0.7195 Median :0.6493 Median :0.7086
## Mean :0.8779 Mean :0.8129 Mean :0.7486 Mean :0.8122
## 3rd Qu.:0.8824 3rd Qu.:0.8596 3rd Qu.:0.8404 3rd Qu.:0.8438
## Max. :9.7181 Max. :9.7320 Max. :9.3662 Max. :9.3740
## NA's :39 NA's :19 NA's :20 NA's :20
## Training_Time Fecha Hora
## Min. : 0.1032 Length:560 Length:560
## 1st Qu.: 1.2441 Class :character Class :character
## Median : 2.4347 Mode :character Mode :character
## Mean : 2.9910
## 3rd Qu.: 3.8131
## Max. :46.9856
## NA's :20
#resumen estadístico post imputación de NA´s
summary(imputacion)
## Algorithm Framework Problem_Type Dataset_Type
## Length:560 Length:560 Length:560 Length:560
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Accuracy Precision Recall F1_Score
## Min. :0.5038 Min. :0.4019 Min. :0.3001 Min. :0.4000
## 1st Qu.:0.6236 1st Qu.:0.5632 1st Qu.:0.4819 1st Qu.:0.5515
## Median :0.7578 Median :0.7195 Median :0.6493 Median :0.7086
## Mean :0.8779 Mean :0.8129 Mean :0.7486 Mean :0.8122
## 3rd Qu.:0.8824 3rd Qu.:0.8596 3rd Qu.:0.8404 3rd Qu.:0.8438
## Max. :9.7181 Max. :9.7320 Max. :9.3662 Max. :9.3740
## NA's :39 NA's :19 NA's :20 NA's :20
## Training_Time Fecha Hora
## Min. : 0.1032 Length:560 Length:560
## 1st Qu.: 1.2441 Class :character Class :character
## Median : 2.4347 Mode :character Mode :character
## Mean : 2.9910
## 3rd Qu.: 3.8131
## Max. :46.9856
## NA's :20
#Verificamos si existen datos atípicos en nuestra variable de interés (Precision)
boxplot(imputacion$Precision, xlab= "Precision", ylab= "Distribución", col = "lightgreen")

#Observamos puntos fuera del diagrama de cajas, lo cual nos indica la presencia de datos atípicos
#Miramos cuales son los datos atípicos
boxplot.stats(imputacion$Precision)$out
## [1] 9.732008 4.055990 6.207645 4.145151 9.674189 5.432777 8.932619 4.075645
## [9] 5.760933 7.044472
#Grafico descriptivo despues de hecha la imputacion
hist(imputacion$Precision, xlab = "Datos Precision" , ylab = "Frecuencia", col = "lightblue")

hist(imputacion$Accuracy, xlab = "Datos Accuracy" , ylab = "Frecuencia", col = "blue")

##Podemos evidenciar la asimetría en las dos graficas observando como la mayoria de los valores se encuentran en solo un lado de la grafica (de 0 a 1), tambien encontramos valores atipicos en los dos graficos
Resultados <- imputacion[, "Accuracy"]
summary(Resultados$Accuracy)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.5038 0.6236 0.7578 0.8779 0.8824 9.7181 39
#En Accuracy nos referimos al porcentaje de predicciones correctas en relación con todas las predicciones realizadas este podemos observar, una media de 0.8779 y una mediana de 0.7578, lo que refleja un buen rendimiento general. El valor máximo es 9.7181. Podemos evidenciar por los datos del primer cuartil que el 25% de los valores estan por debajo de 0.6236 y en el tercer cuartil el 75% de los valores están por debajo de 0.8824.
Resultados2 <- imputacion[, "Precision"]
summary(Resultados2$Precision)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.4019 0.5632 0.7195 0.8129 0.8596 9.7320 19
#En la precision nos encontramos con el porcentaje de verdaderos positivos sobre todas las predicciones que fueron clasificadas como positivas este podemos observar una media de 0.8129 y una mediana de 0.7195, lo que indica un rendimiento positivo en general. El valor máximo es 9.7320. Podemos evidenciar por los datos del primer cuartil que el 25% de los valores están por debajo de 0.5632, y en el tercer cuartil, el 75% de los valores están por debajo de 0.8596.
Resultados_Recall <- imputacion[, "Recall"]
summary(Resultados_Recall)
## Recall
## Min. :0.3001
## 1st Qu.:0.4819
## Median :0.6493
## Mean :0.7486
## 3rd Qu.:0.8404
## Max. :9.3662
## NA's :20
# En la columna Recall, que mide la capacidad del modelo para identificar correctamente los verdaderos positivos, observamos los valores estadísticos. El Recall tiene una media de 0.7486 y una mediana de 0.6493, lo que indica que los datos están ligeramente sesgados hacia la derecha. El valor máximo de 9.3662 sugiere un posible valor atípico, similar al análisis del F1_Score, ya que está muy por encima de los cuartiles superiores. También hay 20 valores faltantes (NA’s) que deberán ser tratados antes de realizar un análisis más profundo.
Resultados_F1 <- imputacion[, "F1_Score"]
summary(Resultados_F1)
## F1_Score
## Min. :0.4000
## 1st Qu.:0.5515
## Median :0.7086
## Mean :0.8122
## 3rd Qu.:0.8438
## Max. :9.3740
## NA's :20
# El F1_Score es una métrica que equilibra la precisión y el recall. El resumen del F1_Score muestra una media de 0.8122 y una mediana de 0.7086, lo que sugiere una ligera asimetría positiva. El valor máximo es 9.3740, significativamente mayor al resto, lo que indica un posible valor atípico. La mayoría de los datos se encuentran entre 0.5515 y 0.8438 (primer y tercer cuartil). Hay 20 valores faltantes (NA’s) que deben ser manejados antes de continuar con el análisis.
table(imputacion$Algorithm)
##
## K-Means Neural Network Random Forest SVM
## 163 135 126 136
# En la columna Algorithm, podemos presentar los nombres de loss algorimos usados en esta base de datos.
#Grafico Bivariado
ggplot(imputacion, aes(x = Accuracy, y = Precision)) +
geom_point(color = "blue", size = 3, alpha = 0.6) +
labs(title = "Accuracy vs Precision",
x = "Accuracy",
y = "Precision") +
theme_minimal()
## Warning: Removed 58 rows containing missing values or values outside the scale range
## (`geom_point()`).

#En este gráfico bivariado por un lado presenciamos la precisión y por otro lado tenemos el Accuracy presenciamos distintos valores atípicos tanto en la precisión como en Accuracy pero los valores más que todo se encuentran entre el cero y el uno que es entre los valores que se miden estos.
# 2 Grafico Bivariado
ggplot(imputacion, aes(x = Algorithm, y = Precision, fill = Algorithm)) +
geom_bar(stat = "summary", fun = "mean", position = "dodge") +
labs(title = "Average Precision by Algorithm",
x = "Algorithm",
y = "Precision") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 19 rows containing non-finite outside the scale range
## (`stat_summary()`).

#El gráfico bivariado muestra la precisión de los algoritmos de machine learning: K-Means, Redes Neuronales, Bosques Aleatorios y Máquinas de Vectores de Soporte (SVM). Se observa que K-Means y SVM tienen las mayores precisiones, siendo ligeramente superiores a 0.75. Las Redes Neuronales y los Bosques Aleatorios presentan una precisión similar, alrededor de 0.70. Este análisis sugiere que K-Means y SVM podrían ser mejores opciones en términos de precisión para este conjunto de datos específico, pero se deben considerar otros factores como la naturaleza de los datos y el tiempo de procesamiento.
#Para concluir, el análisis realizado sobre la precisión de los algoritmos de machine learning aplicados a datos de imagen nos lleva a destacar a K-Means y SVM como las opciones que presentan los mejores resultados en términos de precisión, superando ligeramente el umbral de 0.75. Aunque las Redes Neuronales y los Bosques Aleatorios también muestran un rendimiento competitivo, con precisiones cercanas a 0.70, K-Means y SVM se perfilan como los algoritmos más eficientes para este conjunto de datos en particular. No obstante, es importante señalar que la elección del algoritmo óptimo no debe basarse únicamente en la precisión, sino también en otros aspectos relevantes como la naturaleza de los datos, el costo computacional y el tiempo de procesamiento. Estos factores juegan un papel crucial en la implementación exitosa de un modelo de inteligencia artificial en un entorno de producción real.