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:

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 1

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 2
#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 3

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 4

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 5

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 6

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 7

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 8

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 9

¿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

[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.