Análisis de clustering y clasificación usando datos simulados es un proyecto bastante amplio. A continuación, se proporciono un esquema detallado de cómo se podría estructurar este proyecto en R, utilizando diferentes técnicas de análisis de datos y aprendizaje automático. Este esquema incluirá k-Means Clustering, Hierarchical Clustering, k-Nearest Neighbors (k-NN), Support Vector Machines (SVM), Decision Trees y Random Forests.
Paso 1: Configuración Inicial
Instalar y carga los paquetes necesarios
Paso 2: Crear Datos Simulados
Conjunto de datos simulados para los análisis
set.seed(123)
n <- 100 # Número de observaciones
p <- 2 # Número de características
labels <- sample(c("Red", "Yellow"), n, replace = TRUE)
X <- matrix(rnorm(n * p), nrow = n, ncol = p)
data <- data.frame(X, Class = factor(labels))
Paso 3: k-Means Clustering
Análisis de clustering k-means
# Ajustar el modelo k-means con diferentes parámetros
km_res <- kmeans(X, centers = 3, iter.max = 25, nstart = 5)
# Colores para la visualización
colors <- c("blue", "green", "red")
# Visualizar los resultados del clustering con etiquetas originales y centroides
plot(X, col = colors[km_res$cluster], pch = 19, cex = 1.5,
xlab = "Característica 1", ylab = "Característica 2",
main = "Resultados de k-Means Clustering")
points(km_res$centers, col = colors[1:3], pch = 8, cex = 2)
# Añadir leyenda
legend("topright", legend = c("Cluster 1", "Cluster 2", "Cluster 3"),
col = colors, pch = 19, cex = 1)
Paso 4: Hierarchical Clustering
Análisis de clustering jerárquico
# Usar diferentes métodos de vinculación y métricas de distancia
hc_complete <- hclust(dist(X), method = "complete")
hc_average <- hclust(dist(X), method = "average")
hc_single <- hclust(dist(X), method = "single")
# Visualización del dendrograma con el método de vinculación completa
plot(hc_complete, main = "Dendrograma - Vinculación Completa",
sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_complete, k = 2, border = "blue")
# Visualización del dendrograma con el método de vinculación promedio
plot(hc_average, main = "Dendrograma - Vinculación Promedio",
sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_average, k = 2, border = "green")
# Visualización del dendrograma con el método de vinculación simple
plot(hc_single, main = "Dendrograma - Vinculación Simple",
sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_single, k = 2, border = "red")
Paso 5: k-Nearest Neighbors
Aplica el algoritmo k-Nearest Neighbors:
# Añadir predicciones y etiquetas reales a los datos
knn_res <- knn(train = X, test = X, cl = labels, k = 3)
data1 <- data.frame(X, Actual = labels, Predicted = knn_res)
# visualizar cómo el algoritmo k-NN clasifica los datos:
ggplot(data1, aes(x = X1, y = X2, color = Actual, shape = Predicted)) +
geom_point(alpha = 0.7) +
labs(title = "k-NN Classification Results", x = "Feature 1", y = "Feature 2") +
scale_shape_manual(values = c(15, 17)) +
theme_minimal()
# Explorar diferentes valores de k
k_values <- c(1, 3, 5, 7)
accuracy_rates <- sapply(k_values, function(k) {
knn_pred <- knn(train = X, test = X, cl = labels, k = k)
mean(knn_pred == labels)
})
# Graficar la precisión en función de k
plot(k_values, accuracy_rates, type = "b", col = "blue",
xlab = "k (Number of Neighbors)", ylab = "Accuracy",
main = "k-NN Accuracy for Different k Values")
Paso 6: Support Vector Machines
Support Vector Machines para clasificación
data1 <- data.frame(X1 = X[,1], X2 = X[,2], Class = as.factor(labels))
# Ajustar modelos SVM con diferentes kernels
svm_linear <- svm(Class ~ ., data = data1, kernel = "linear", cost = 1)
svm_radial <- svm(Class ~ ., data = data1, kernel = "radial", gamma = 1, cost = 1)
svm_polynomial <- svm(Class ~ ., data = data1, kernel = "polynomial", degree = 3, cost = 1)
# Función para crear un grid de datos para visualización
make_grid <- function(x, n = 200) {
grange <- apply(x, 2, range)
x1 <- seq(from = grange[1,1], to = grange[2,1], length.out = n)
x2 <- seq(from = grange[1,2], to = grange[2,2], length.out = n)
expand.grid(X1 = x1, X2 = x2)
}
# Crear un grid de datos
grid <- make_grid(X)
# Predecir en el grid
grid$Class <- predict(svm_linear, newdata = grid)
# Graficar los resultados
ggplot(data1, aes(x = X1, y = X2, color = Class)) +
geom_point() +
geom_point(data = grid, aes(x = X1, y = X2, color = Class), alpha = 0.2) +
labs(title = "SVM Linear Kernel", x = "Feature 1", y = "Feature 2") +
scale_color_manual(values = c("Green" = "green", "Black" = "black")) +
theme_minimal()
Paso 7: Decision Tree
Árbol de decisión
# Ajustar modelo de árbol de decisión con parámetros
tree_res <- rpart(Class ~ ., data = data, method = "class",
control = rpart.control(minsplit = 10, cp = 0.01, maxdepth = 3))
# Instalar y cargar rpart.plot si no está instalado
#if (!require(rpart.plot)) install.packages("rpart.plot")
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.3.2
# Visualización mejorada del árbol de decisión
rpart.plot(tree_res, main = "Árbol de Decisión", extra = 104)
# Predecir clases con el árbol de decisión
data$Predicted <- predict(tree_res, type = "class")
# Gráfico de dispersión de las clasificaciones
ggplot(data, aes(x = X1, y = X2, color = Predicted)) +
geom_point() +
labs(title = "Clasificaciones del Árbol de Decisión", x = "Característica 1", y = "Característica 2") +
scale_color_manual(values = c("Red" = "red", "Yellow" = "yellow")) +
theme_minimal()
Paso 8: Random Forest
Implementa un Random Forest
# Ajustar modelo de Random Forest con parámetros adicionales
rf_res <- randomForest(Class ~ ., data = data, ntree = 500, mtry = 2)
# Visualizar la importancia de las variables
importance <- importance(rf_res)
barplot(importance, main = "Importancia de las Variables en Random Forest",
xlab = "Variables", ylab = "Importancia", col = "lightblue")
# Predecir clases con Random Forest
data$Predicted <- predict(rf_res, data)
# Gráfico de dispersión de las clasificaciones
library(ggplot2)
ggplot(data, aes(x = X1, y = X2, color = Predicted)) +
geom_point() +
labs(title = "Clasificaciones del Random Forest", x = "Característica 1", y = "Característica 2") +
scale_color_manual(values = c("Red" = "red", "Yellow" = "yellow")) +
theme_minimal()
Notas Importantes
Visualización y Análisis: Cada bloque de código realiza un tipo diferente de análisis y, en algunos casos, produce una visualización correspondiente.
Interpretación: Este ejemplo utiliza datos simulados y técnicas simplificadas para propósitos ilustrativos. En un escenario real, deberías ajustar los métodos y parámetros a tus datos específicos y requerimientos.
Validación: Para un análisis más robusto, considera implementar técnicas de validación como la validación cruzada.