Ejemplo de clasificación estadística usando un dataset de asteroides

Autor: | Última modificación: 22 de noviembre de 2022 | Tiempo de Lectura: 3 minutos

Vamos a ver un ejemplo de clasificación estadística usando un conjunto de datos cuya categoría es la clasificación de asteroides.

Los datos de entrada son sobre asteroides NeoWs. NeoWs (Near Earth Object Web Service) es un servicio web RESTful para información de asteroides cercanos a la Tierra. Con NeoWs, un usuario puede buscar asteroides según su fecha de aproximación más cercana a la Tierra o buscar un asteroide específico con su identificación de cuerpo pequeño JPL de la NASA, así como explorar el conjunto de datos general.

Ejemplo de clasificación estadística

Leemos el dataset:

#ejemplo de clasificación estadística
library (tidyverse, warn.conflicts = FALSE)
df_asteroids <- read.csv ('./data/nasa_asteroids.csv')
str (df_asteroids)
Ejemplo de clasificación estadística usando un dataset de asteroides 1
Ejemplo de clasificación estadística usando un dataset de asteroides 2

La columna Hazardous nos dice si el asteroide es potencialmente peligroso o no.

table (df_asteroids$Hazardous)

False: 3932

True: 755

Vamos a ver si existen asteroides duplicados:

head (sort (table (df_asteroids$Name), decreasing = T), 10)

3102762

7

3748472

7

2277810

6

3772993

6

2136818

5

3117468

5

3566465

5

3608620

5

3738932

5

2003362

4

paste ("Hay", nrow (df_asteroids), "entradas para", length (unique (df_asteroids$Name)), "asteroides")

‘Hay 4687 entradas para 3692 asteroides’

Nos quedamos solo con un asteroide por nombre:

#ejemplo de clasificación estadística
df_asteroids <- df_asteroids l>
arrange (desc (Close.Approach.Date)) l> 
distinct (Name, .keep_all = TRUE)

dm (df_asteroids)

3692 . 40

Borramos columnas que no necesitamos para nuestro algoritmo de clasificación:

#ejemplo de clasificación estadística
df_asteroids $Neo.Reference.ID <- NULL
df_asteroids$Name <- NULL
df_asteroids$Equinox <- NULL
df_asteroids$0rbiting.Body <- NULL
df_asteroids$0rbit.ID <- NULL
df_asteroids$Epoch.Date.Close.Approach <- NULL

Calculamos la correlación y vemos la relación entre variables.

Con esto vemos muy fácilmente cuáles y cuántas áreas están correlacionadas y observamos que algunas tienen una correlación exageradamente alta:

#ejemplo de clasificación estadística
cor_asteroides <- df_asteroids %>% dplyr::select (where (is.numeric)) %>% cor()
library (corrplot)
library (RColorBrewer)

options (repr.plot.height = 5, repr.plot.width = 8, repr.plot.res = 200)

corrplot (cor_asteroides, type = "upper", order = "hclust", col = brewer.pal (n = 8, name = "RdYLBu"), tl.cex = 0.8)

corrplot 0.90 loaded

ejemplo de clasificación estadística

Vemos, por ejemplo, que hay correlaciones perfectas que tenemos que quitar, como el diámetro en pies y el diámetro en metros, que están muy correlacionadas, es decir, son lo mismo.

df_asteroids %>% select (starts_with ("Est.Dia")) %>% cor ()
Ejemplo de clasificación estadística usando un dataset de asteroides 3

Nos quedamos con las columnas que son numéricas, calculamos la correlación y sobre esta matriz de correlación eliminamos las columnas que tienen una correlación superior a 0.95:

#ejemplo de clasificación estadística
library (caret)
df_asteroids_numeric <- df_asteroids dplyr::select (where (is.numeric))
cor_asteroides <- df_asteroids_numeric cor ()
col_to_remove = findCorrelation (cor_asteroides, cutoff = 0.95)

df_asteroids_reduced = df_asteroids_numeric [ , c (col_to_remove)]
df_asteroids_reduced$Hazardous <- df_asteroids$Hazardous
str (df_asteroids_reduced)

Loading required package: lattice

Ejemplo de clasificación estadística usando un dataset de asteroides 4
findCorrelation
table (df_asteroids_reduced$Hazardous)

False: 3116

True: 576

#ejemplo de clasificación estadística
df_asteroids_reduced$Hazardous <- as.factor (df_asteroids_reduced$Hazardous)
idx <- sample (1 : nrow (df_asteroids_reduced), * 0.7 nrow(df_asteroids_reduced)*0.7)
df_train <- df_asteroids_reduced [ idx, ]
df_test <- df_asteroids_reduced [ -idx, ]
table (df_train$Hazardous)

False: 2158

True: 426

head (df_train)
Ejemplo de clasificación estadística usando un dataset de asteroides 5
model_reglog <- glm (formula = Hazardous~., df_train, family = binomial ())
summary (model_reglog)

Warning message:

«glm.fit: fitted probabilities numerically 0 or 1 occurred»

Ejemplo de clasificación estadística usando un dataset de asteroides 6
pred_train <- predict (model_reglog, df_train)
table (real = df_train$Hazardous, factor (pred_train > 0, labels = c ("False", "True")))
realFalseTrue
False210751
True56370
caret :: confusionMatrix (data = factor (predict (model_reglog, df_train) > 0, labels = c ("False", "True")),
reference = df_train$Hazardous,
positive = 'True')
Ejemplo de clasificación estadística usando un dataset de asteroides 7

Aquí tenemos los resultados: un 95% para train.

df_test$pred <- predict (model_reglog, df_test)
df_test$pred_factor <- factor (df_test$pred > 0, labels = c ("False", "True"))
table (pred = df_test$pred_factor, real = df_test$Hazardous)
predFalseTrue
False93427
True24123
caret :: confusionMatrix (data = df_test$pred_factor,
reference = df_testsHazardous, positive = 'True')

Confusion Matrix and Statistics

Reference

PredictionFalseTrue
False 93427
True24123
Ejemplo de clasificación estadística usando un dataset de asteroides 8

Para test también son bastante buenos: 95%.

¿Quieres seguir aprendiendo?

Ahora que hemos visto este ejemplo de clasificación en estadística, podemos subir al siguiente nivel y seguir aprendiendo. En KeepCoding tenemos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que adquirirás todas las herramientas necesarias para incursionar rápidamente en el mercado laboral del Big Data. ¡Anímate a cambiar tu vida y solicita más información!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.