Clusterización de datos
Se aplica el algoritmo k-medias para agrupar las flores en clústeres
basados en características como longitud y anchura del sépalo y del
pétalo. Se visualizan los clústeres mediante gráficos de dispersión y se
presentan tablas con información detallada sobre la asignación de
especies a cada clúster y los centroides de los clústeres.
El conjunto de datos contiene muestras de cada una de tres especies
de Iris (Iris setosa, Iris virginica e Iris versicolor). En esos datos
se describen cuatro rasgos de cada muestra: el largo y ancho del sépalo
y pétalo, en centímetros. Basado en la combinación de estos cuatro
rasgos, se desarrolló un modelo discriminante lineal para distinguir
entre una especie y otra.
# Instalar y cargar los paquetes
install.packages("ggplot")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
## Warning: package 'ggplot' is not available for this version of R
##
## A version of this package for your version of R might be available elsewhere,
## see the ideas at
## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
install.packages("cluster")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
# Cargar la librería necesaria
library(ggplot2)
library(cluster)
# Cargar la base de datos iris
data(iris)
# Preparar los datos para la clusterización
iris_data <- iris[, -5] # Eliminar la columna de especies
set.seed(123) # Fijar una semilla para reproducibilidad
# Realizar la clusterización utilizando el algoritmo k-medias
k <- 3 # Número de clústeres
kmeans_model <- kmeans(iris_data, centers = k, nstart = 25)
# Añadir el resultado de la clusterización a los datos originales
iris_clustered <- cbind(iris_data, cluster = kmeans_model$cluster)
Representación gráfica según especie y
característica
| La base de datos iris es un conjunto de datos clásico en el campo de
la estadística y el aprendizaje automático. Fue introducido por el
biólogo británico Ronald Fisher en su artículo de 1936 “The Use of
Multiple Measurements in Taxonomic Problems” como un ejemplo de análisis
discriminante lineal. El conjunto de datos consta de 150 observaciones
de flores de iris, 50 de cada una de las tres especies; Iris setosa,
Iris virginica e Iris versicolor. |
# Visualizar los clústeres con tamaño de punto proporcional al ancho del pétalo
ggplot(iris_clustered, aes(x = Sepal.Length, y = Sepal.Width, color = factor(cluster), size = Petal.Width)) +
geom_point() +
labs(title = "Clusterización de flores Iris",
x = "Longitud del sépalo",
y = "Anchura del sépalo",
color = "Cluster",
size = "Anchura del pétalo") +
theme_minimal()

# Obtener colores únicos para cada especie
species_colors <- c("setosa" = "red", "versicolor" = "green", "virginica" = "blue")
# Asignar colores de especie al gráfico de pares
pairs(iris[, -5], col = species_colors[iris$Species], pch = 20)

# Crear una tabla de contingencia de especies por cluster
cluster_species_table <- table(iris$Species, kmeans_model$cluster)
# Imprimir la tabla
print(cluster_species_table)
##
## 1 2 3
## setosa 50 0 0
## versicolor 0 48 2
## virginica 0 14 36
| Estos números representan una tabla de contingencia que muestra la
distribución de las especies de iris en cada uno de los clusters
obtenidos mediante la clusterización. Cada fila representa una especie
de iris, mientras que cada columna representa un cluster. |
# Obtener los centroides de cada clúster
centroides <- kmeans_model$centers
# Crear una tabla con los centroides
centroides_df <- as.data.frame(centroides)
rownames(centroides_df) <- paste("Cluster", 1:k)
# Mostrar la tabla
print(centroides_df)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Cluster 1 5.006000 3.428000 1.462000 0.246000
## Cluster 2 5.901613 2.748387 4.393548 1.433871
## Cluster 3 6.850000 3.073684 5.742105 2.071053
| Estos datos representan los centroides de cada cluster obtenidos
mediante el algoritmo de k-medias. Cada fila corresponde a un cluster, y
cada columna muestra el valor promedio de las características de los
datos en ese cluster |
# Calcular el promedio de longitud y anchura del sépalo y del pétalo por especie
species_means <- aggregate(. ~ Species, data = iris, FUN = mean)
# Imprimir la tabla de promedios por especie
print(species_means)
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 5.006 3.428 1.462 0.246
## 2 versicolor 5.936 2.770 4.260 1.326
## 3 virginica 6.588 2.974 5.552 2.026
| Estos datos muestran el promedio de las características de las
flores iris para cada especie según, longitud y ancho promedio del
sépalo y del pétalo. |