La razón por la que elegí el dataset de Pokémon es porque es un tema
que me interesa personalmente.
El objetivo de este análisis es desarrollar un modelo de red neuronal
para predecir si un Pokémon es legendario
(is_legendary) usando estadísticas de combate como:
pokemon <- read_csv("C:/R/all_pokemon_data.csv")
View(pokemon)
# Verificar valores faltantes
colSums(is.na(pokemon))## Name National Dex # Primary Typing
## 0 0 0
## Secondary Typing Secondary Typing Flag Generation
## 530 0 0
## Legendary Status Form Alt Form Flag
## 0 0 0
## Evolution Stage Number of Evolution Color ID
## 0 0 0
## Catch Rate Height (dm) Weight (hg)
## 0 0 0
## Height (in) Weight (lbs) Base Stat Total
## 0 0 0
## Health Attack Defense
## 0 0 0
## Special Attack Special Defense Speed
## 0 0 0
# Eliminar filas con NA
pokemon <- na.omit(pokemon)
# Renombrar la columna objetivo
names(pokemon)[names(pokemon) == "Legendary Status"] <- "is_legendary"
# Convertir lógica a binario
pokemon$is_legendary <- as.numeric(pokemon$is_legendary)
# Seleccionar variables relevantes
datos_poke <- pokemon[, c("Health", "Attack", "Defense", "Speed",
"Special Attack", "Special Defense", "is_legendary")]
# Renombrar columnas para compatibilidad
colnames(datos_poke) <- make.names(colnames(datos_poke))corr_poke <- round(cor(datos_poke), 2)
corrplot(corr_poke, method = "number", type = "upper", tl.cex = 0.8)Este análisis nos permite ver qué variables están más relacionadas entre sí. Nos ayuda a identificar colinealidades o patrones previos al entrenamiento.
set.seed(123)
red_poke <- neuralnet(is_legendary ~ Health + Attack + Defense + Speed + Special.Attack + Special.Defense,
hidden = c(5, 3),
linear.output = FALSE,
act.fct = "logistic",
data = datos_poke)
# Guardar modelo entrenado
save(red_poke, file = "C:/R/Unidad 2/Modelos Entrenados/modeloPokemon.RData")
# Visualización de la red
plot(red_poke)# Obtener predicciones
preds <- unlist(red_poke$net.result)
# Tabla comparativa
tablita_poke <- data.frame(
Predicho = round(preds),
Real = datos_poke$is_legendary,
Acierto = round(preds) == datos_poke$is_legendary
)
View(tablita_poke)
# Precisión del modelo
precision <- sum(tablita_poke$Acierto) / nrow(tablita_poke) * 100
paste("Precisión del modelo:", round(precision, 2), "%")## [1] "Precisión del modelo: 85.17 %"
Este proyecto consistió en:
Esta práctica fue una excelente introducción al uso de redes neuronales en R. Aprendí cómo:
¡Además, fue divertido analizar algo relacionado con Pokémon! 🎮