Ejemplo de clúster por densidad con la clasificación de estrellas

Autor: | Última modificación: 10 de noviembre de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo veremos un ejemplo de clúster por densidad con un dataset que contiene 6219 estrellas que muestran la magnitud aparente en el rango visible. El dataset contiene 5 columnas:

  1. Id de la estrella.
  2. Magnitud aparente en el espectro visible.
  3. Color observado en el rango B-V (Blue-Visible).
  4. Paralaje de la estrella observada (en segundo de arco).
  5. Incertidumbre del paralaje (en miliarcsec).
ejemplo de clúster por densidad

Ejemplo de clúster por densidad

En este ejercicio hacemos que se calcule la distancia a a la estrella en pársecs en función de los segundos de arco:

Δ = 1

——–

π

1 pársec= 206265 ua = 3,2616 años luz

La magnitud absoluta de una estrella está relacionada con la magnitud aparente por

Mv = mv – 5 . log10 Δ + 5

Si pintamos la magnitud absoluta de una estrella en función de su temperatura (color), obtenemos lo que se llama un diagrama Hertzsprung-Russell, a veces abreviado como diagrama H-R.

Ejemplo de clúster por densidad con la clasificación de estrellas

Lo que vamos a hacer es cargar los datos y calcular la magnitud real en función de la magnitud visible. Calcularemos el brillo total de las estrellas, sin importar si están cerca o están lejos.

#ejemplo de clúster por densidad
hr = read.csv ("data/yaletrigplx.dat", col.names = c ("id", "my", "BV", "parallax", "error"), sep = " " }
head (hr)
Ejemplo de clúster por densidad con la clasificación de estrellas
#ejemplo de clúster por densidad
hrsparsec = 1 / hr$parallax
hr$Mv <- hr$mv - 5 * log10 (hr$parsec) + 5
library(ggplot2)

options (repr.plot.height = 4, repr.plot.width = 6)
ggplot (hr, aes (y = Mv, x = BV))  + geom_point (size = 0.1) + scale_y_reverse ()
Ejemplo de clúster por densidad con la clasificación de estrellas

Como observamos en el diagrama, las estrellas no se distribuyen de manera aleatoria. Está lo que se conoce como la secuencia principal (raya roja), que tiende a estar alrededor de las otras dos secuencias (señaladas en verde y azul).

Para que podamos sacar de allí otros valores que no sean lineales, rectos, tenemos que estandarizar, es decir, normalizar.

#ejemplo de clúster por densidad
library (dbscan)
library (tidyverse)

hr$norm_Mv = (hr$Mv - mean (hr$Mv)) / sd (hr$Mv)
hr$norm_BV = (hr$BV - mean (hr$BV)) / sd (hrsBV)

summary (hr)
Ejemplo de clúster por densidad con la clasificación de estrellas

Vamos a crear el primer clúster:

#ejemplo de clúster por densidad
hr_cl <- dbscan (hr [, c ("norm_Mv", "norm BV")], minPts = 18, eps = 0.09, borderPoints=TRUE)
hr_cl

hr$cluster <- as.factor (hr_cl$cluster)
ggplot (hr, aes (y = norm_Mv, x = norm_BV, color = cluster)) + geom_point (size = 0.01) + scale_y_reverse ()

DBSCAN clustering for 6219 objects.

Parameters: eps = 0.09, minPts = 18

The clustering contains 9 cluster (s) and 1432 noise points.

0123456789
143239942471583373841422
Ejemplo de clúster por densidad con la clasificación de estrellas

Acto seguido, vamos a pintar el hulplot:

#ejemplo de clúster por densidad
hullplot (hr [, c ("norm_Mv", "norm BV")], hr_cl)
Ejemplo de clúster por densidad con la clasificación de estrellas

Cuando tenemos varios puntos en el mismo clúster, el hull es la zona que engloba a todos esos puntos.

KNNdist devuelve un vector con la distancia a los k elementos más cercanos de cada punto:

#ejemplo de clúster por densidad
k30_dist <- hr %>% select (norm_Mv, norm_BV) KNNdist (k = 30)
head (cbind (hr, k30_dist))
Ejemplo de clúster por densidad con la clasificación de estrellas

Aquí lo que hemos hecho es calcular el kNN de 30 elementos, es decir, la distancia de una estrella a sus 30 estrellas vecinas más cercanas.

#ejemplo de clúster por densidad
plot (sort (KNNdist (hr [, c ("norm_My", "norm_BV")], k = 30)), t = 'l')
grid ()

El codo en la curva de los valores de kNNdist nos puede dar una zona en la que el valor de eps dé mejores resultados. El codo aquí empieza a aumentar en 0.3, es decir, cuando ponemos una distancia de más de 0.3, la distancia empieza a aumentar:

Ejemplo de clúster por densidad con la clasificación de estrellas

Si pintamos el kNNdist, el resultado es la curva anterior. En este diagrama podremos observar en qué momento crece:

#ejemplo de clúster por densidad
hr_cl <- dbscan (hr [, c ("norm_Mv", "norm_BV")], minPts = 30, eps = 0.3, borderPoints = TRUE)
hr_cl
hr$cluster <- as.factor (hr_cl$cluster)
ggplot (hr, aes (y = norm_Mv, x = norm_BV, color = cluster)) + geom_point (size = 0.01) + scale_y_reverse ()
012
1785871170

Available fields: cluster, eps, minPts

Ejemplo de clúster por densidad con la clasificación de estrellas

¿Qué sigue?

Hemos afianzado nuestros conocimientos respecto a los clústeres por densidad por medio de un ejemplo. Si quieres seguir aprendiendo más sobre esta y otras temáticas interesantes, puedes inscribirte a nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que aprenderás y adquirirás todos los conocimientos necesarios para incursionar en un mercado laboral lleno de grandes oportunidades. En la actualidad, uno de los trabajos mejor pagados es el de programador, así que no esperes más y ¡solicita más información para darle un giro a tu vida!

👉 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

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado