# install.packages("MeanShift") # bila gagal: remotes::install_github("mattiaciollaro/MeanShift")
# install.packages("gifski") # untuk membuat GIF
library(MeanShift)
## Loading required package: parallel
## Loading required package: wavethresh
## Warning: package 'wavethresh' was built under R version 4.4.3
## Loading required package: MASS
## Warning: package 'MASS' was built under R version 4.4.3
## WaveThresh: R wavelet software, release 4.7.2, installed
## Copyright Guy Nason and others 1993-2022
## Note: nlevels has been renamed to nlevelsWT
library(gifski)
## Warning: package 'gifski' was built under R version 4.4.3
OUT_DIR <- "hasil_gif"
dir.create(OUT_DIR, showWarnings = FALSE)
cat("GIF disimpan di:", normalizePath(OUT_DIR), "\n")
## GIF disimpan di: C:\Users\hp\Downloads\hasil_gif
# 1. Data dan preprocessing
# Data Gaussian Blobs
set.seed(42)
n_per_kelompok <- c(334, 333, 333)
pusat_asli <- rbind(c( 4.7, 2.0),
c(-2.6, 8.9),
c(-6.8, -6.8))
X <- do.call(rbind, lapply(1:3, function(k) {
cbind(rnorm(n_per_kelompok[k], mean = pusat_asli[k, 1], sd = 1),
rnorm(n_per_kelompok[k], mean = pusat_asli[k, 2], sd = 1))
}))
colnames(X) <- c("Fitur1", "Fitur2")
y_asli <- rep(1:3, times = n_per_kelompok)
# Palet pastel berwarna (k warna untuk k cluster) dan versi gelapnya untuk pusat cluster
palet_pastel <- function(k) {
dasar <- c("#FFADAD", "#A0C4FF", "#CAFFBF", "#FFD6A5",
"#BDB2FF", "#9BF6FF", "#FDFFB6", "#FFC6FF")
if (k <= length(dasar)) return(dasar[1:k])
c(dasar, hsv(h = seq(0, 1, length.out = k - length(dasar) + 1)[-1], s = 0.4, v = 1))
}
gelapkan <- function(warna, faktor = 0.55) {
m <- col2rgb(warna) / 255 * faktor
rgb(m[1, ], m[2, ], m[3, ])
}
warna_kelompok <- palet_pastel(3)
# 1.1 Ukuran dan struktur dataset
cat("\n=== 1.1 Ukuran dan struktur ===\n")
##
## === 1.1 Ukuran dan struktur ===
cat("Dimensi (baris x kolom):", dim(X), "\n")
## Dimensi (baris x kolom): 1000 2
cat("Kelas objek:", class(X), "| tipe data:", typeof(X), "\n")
## Kelas objek: matrix array | tipe data: double
str(X)
## num [1:1000, 1:2] 6.07 4.14 5.06 5.33 5.1 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:2] "Fitur1" "Fitur2"
print(head(X))
## Fitur1 Fitur2
## [1,] 6.070958 2.9885968
## [2,] 4.135302 1.9265417
## [3,] 5.063128 0.6129734
## [4,] 5.332863 0.6933241
## [5,] 5.104268 1.2316047
## [6,] 4.593875 1.4728919
print(table(Kelompok_Asli = y_asli))
## Kelompok_Asli
## 1 2 3
## 334 333 333
# 1.2 Eksplorasi sederhana (EDA)
cat("\n=== 1.2 EDA ===\n")
##
## === 1.2 EDA ===
print(summary(X))
## Fitur1 Fitur2
## Min. :-9.414 Min. :-9.150
## 1st Qu.:-6.137 1st Qu.:-6.087
## Median :-2.608 Median : 1.983
## Mean :-1.581 Mean : 1.357
## 3rd Qu.: 4.045 3rd Qu.: 8.255
## Max. : 7.402 Max. :11.534
cat("\nSimpangan baku:\n"); print(round(apply(X, 2, sd), 3))
##
## Simpangan baku:
## Fitur1 Fitur2
## 4.851 6.501
cat("\nRentang (maks - min):\n"); print(round(apply(X, 2, function(v) diff(range(v))), 3))
##
## Rentang (maks - min):
## Fitur1 Fitur2
## 16.816 20.684
cat("\nKorelasi antarfitur:\n"); print(round(cor(X), 3))
##
## Korelasi antarfitur:
## Fitur1 Fitur2
## Fitur1 1.000 0.409
## Fitur2 0.409 1.000
ringkas_kelompok <- aggregate(as.data.frame(X), by = list(Kelompok = y_asli),
FUN = function(v) c(mean = mean(v), sd = sd(v)))
cat("\nRata-rata dan sd per kelompok asli:\n"); print(ringkas_kelompok)
##
## Rata-rata dan sd per kelompok asli:
## Kelompok Fitur1.mean Fitur1.sd Fitur2.mean Fitur2.sd
## 1 1 4.6777384 0.9629144 1.9885700 1.0163206
## 2 2 -2.6367759 1.0365894 8.8876647 0.9848974
## 3 3 -6.8022651 0.9626058 -6.8083516 1.0063183
par(mfrow = c(1, 3), mar = c(4, 4, 3, 1))
hist(X[, 1], breaks = 30, col = "lightblue", border = "white",
main = "Histogram Fitur 1", xlab = "Fitur 1")
hist(X[, 2], breaks = 30, col = "lightblue", border = "white",
main = "Histogram Fitur 2", xlab = "Fitur 2")
boxplot(X, col = "lightblue", main = "Boxplot kedua fitur")
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
plot(X[, 1], X[, 2], pch = 21, bg = warna_kelompok[y_asli], col = "gray40", cex = 1.1,
xlab = "Fitur 1", ylab = "Fitur 2", main = "Scatter plot Gaussian Blobs")
grid(col = "gray90")
legend("topright", legend = paste("Kelompok", 1:3), pch = 21, pt.bg = warna_kelompok,
col = "gray40", bty = "n")
# 1.3 Missing values, duplikat, dan nilai tak hingga
cat("\n=== 1.3 Pemeriksaan data ===\n")
##
## === 1.3 Pemeriksaan data ===
cat("Missing value per kolom:\n"); print(colSums(is.na(X)))
## Missing value per kolom:
## Fitur1 Fitur2
## 0 0
cat("Total missing value :", sum(is.na(X)), "\n")
## Total missing value : 0
cat("Nilai tak hingga :", sum(!is.finite(X[!is.na(X)])), "\n")
## Nilai tak hingga : 0
cat("Baris duplikat :", sum(duplicated(X)), "\n")
## Baris duplikat : 0
# 1.4 Distribusi: kemencengan, normalitas, pencilan
cat("\n=== 1.4 Distribusi ===\n")
##
## === 1.4 Distribusi ===
kemencengan <- function(v) mean((v - mean(v))^3) / mean((v - mean(v))^2)^1.5
cat("Kemencengan (skewness):", round(apply(X, 2, kemencengan), 3), "\n")
## Kemencengan (skewness): 0.298 -0.143
cat("Shapiro-Wilk data gabungan, p-value:",
signif(apply(X, 2, function(v) shapiro.test(v)$p.value), 3), "\n")
## Shapiro-Wilk data gabungan, p-value: 7.8e-26 1.8e-26
p_kelompok <- sapply(1:3, function(k) apply(X[y_asli == k, ], 2,
function(v) shapiro.test(v)$p.value))
colnames(p_kelompok) <- paste("Kelompok", 1:3)
cat("Shapiro-Wilk per kelompok, p-value:\n"); print(round(p_kelompok, 3))
## Shapiro-Wilk per kelompok, p-value:
## Kelompok 1 Kelompok 2 Kelompok 3
## Fitur1 0.921 0.533 0.612
## Fitur2 0.732 0.913 0.412
jumlah_pencilan <- apply(X, 2, function(v) {
q <- quantile(v, c(0.25, 0.75)); iqr <- q[2] - q[1]
sum(v < q[1] - 1.5 * iqr | v > q[2] + 1.5 * iqr)
})
cat("Pencilan (aturan 1,5 x IQR):", jumlah_pencilan, "\n")
## Pencilan (aturan 1,5 x IQR): 0 0
# 1.5 Skala fitur
cat("\n=== 1.5 Skala fitur ===\n")
##
## === 1.5 Skala fitur ===
rasio_sd <- sd(X[, 1]) / sd(X[, 2])
cat("Rasio sd Fitur1 / Fitur2:", round(rasio_sd, 3), "\n")
## Rasio sd Fitur1 / Fitur2: 0.746
# 1.6 Preprocessing
cat("\n=== 1.6 Preprocessing ===\n")
##
## === 1.6 Preprocessing ===
# (a) Pembersihan: buang baris tidak lengkap
lengkap <- complete.cases(X)
X <- X[lengkap, , drop = FALSE]
y_asli <- y_asli[lengkap]
cat("Baris dibuang karena missing value:", sum(!lengkap), "\n")
## Baris dibuang karena missing value: 0
# (b) Skala: Mean Shift memakai satu bandwidth h untuk semua dimensi (jarak Euclid)
if (rasio_sd > 0.5 && rasio_sd < 2) {
cat("Skala sebanding -> standarisasi tidak diperlukan, data dipakai apa adanya\n")
} else {
cat("Skala berbeda mencolok -> pertimbangkan X <- scale(X) (h ikut disesuaikan)\n")
}
## Skala sebanding -> standarisasi tidak diperlukan, data dipakai apa adanya
# (c) Format: matriks numerik, baris = titik, kolom = fitur
stopifnot(is.matrix(X), is.numeric(X))
n <- nrow(X)
d <- ncol(X)
cat("Data siap dipakai: n =", n, "| d =", d, "\n")
## Data siap dipakai: n = 1000 | d = 2
# 1.7 Rumus dan syarat kernel (Rumus 7.1 sampai 7.5)
cat("\n=== 1.7 Rumus dan syarat kernel ===\n")
##
## === 1.7 Rumus dan syarat kernel ===
# Rumus 7.1: estimasi kepadatan kernel
# f_K(x) = 1/(n h^d) * sum K((x - x_i)/h)
K_gauss <- function(U) {
# Kernel Gaussian ternormalisasi: (2*pi)^(-d/2) * exp(-|u|^2 / 2)
if (is.null(dim(U))) U <- matrix(U, nrow = 1)
dim_u <- ncol(U)
(2 * pi)^(-dim_u / 2) * exp(-0.5 * rowSums(U^2))
}
f_K <- function(x, data, h) {
U <- sweep(data, 2, x) / h
sum(K_gauss(U)) / (nrow(data) * h^ncol(data))
}
h0 <- 1.9
x0 <- colMeans(X)
rumus_71 <- f_K(x0, X, h0)
pembanding <- mean(dnorm(x0[1], X[, 1], h0) * dnorm(x0[2], X[, 2], h0))
cat("x0 =", round(x0, 4), "\n")
## x0 = -1.5808 1.3566
cat(sprintf("f_K(x0) rumus 7.1 = %.8f\n", rumus_71))
## f_K(x0) rumus 7.1 = 0.00017042
cat(sprintf("f(x0) pembanding = %.8f\n", pembanding))
## f(x0) pembanding = 0.00017042
cat("sama:", isTRUE(all.equal(rumus_71, pembanding)), "\n")
## sama: TRUE
# Syarat kernel: (1) integral K = 1, (2) K(x) = K(|x|) (radial)
# Bentuk kernel Gaussian di buku: 1/(2*pi^(d/2)) * exp(-|x|^2/2)
# Bentuk ternormalisasi untuk semua dimensi: 1/(2*pi)^(d/2) * exp(-|x|^2/2)
K_buku <- function(U) {
if (is.null(dim(U))) U <- matrix(U, nrow = 1)
dim_u <- ncol(U)
1 / (2 * pi^(dim_u / 2)) * exp(-0.5 * rowSums(U^2))
}
# Syarat integral K = 1 (jumlah Riemann pada grid)
g1 <- matrix(seq(-10, 10, length.out = 4001), ncol = 1)
a <- seq(-8, 8, length.out = 801)
g2 <- as.matrix(expand.grid(a, a))
dx <- g1[2, 1] - g1[1, 1]
da <- a[2] - a[1]
hasil72 <- data.frame(
dimensi = c("d = 1", "d = 2", "d = 3 (analitik)"),
integral_K_gauss = c(sum(K_gauss(g1)) * dx,
sum(K_gauss(g2)) * da^2,
1),
integral_K_buku = c(sum(K_buku(g1)) * dx,
sum(K_buku(g2)) * da^2,
2^(3 / 2 - 1))
)
cat("\nSyarat 7.2 (integral kernel):\n")
##
## Syarat 7.2 (integral kernel):
print(format(hasil72, digits = 4), row.names = FALSE)
## dimensi integral_K_gauss integral_K_buku
## d = 1 1 0.7071
## d = 2 1 1.0000
## d = 3 (analitik) 1 1.4142
# Syarat K(x) = K(|x|): nilai kernel hanya bergantung pada jarak dari pusat
x <- c(1.3, -0.7)
t_putar <- 40 * pi / 180
R_putar <- matrix(c(cos(t_putar), sin(t_putar),
-sin(t_putar), cos(t_putar)), nrow = 2)
cat("\nK(x) =", K_gauss(x), "\n")
##
## K(x) = 0.05351052
cat("K(-x) =", K_gauss(-x), "\n")
## K(-x) = 0.05351052
cat("K(Rx) dgn |Rx|=|x| =", K_gauss(as.numeric(R_putar %*% x)), "\n")
## K(Rx) dgn |Rx|=|x| = 0.05351052
cat("radial:", isTRUE(all.equal(c(K_gauss(-x), K_gauss(as.numeric(R_putar %*% x))),
rep(K_gauss(x), 2))), "\n")
## radial: TRUE
# Gradien dan vektor pergeseran, kernel Gaussian K(x) = k(|x|^2)
c_k <- (2 * pi)^(-d / 2)
x0 <- c(1, 1)
h0 <- 1.9
s <- rowSums((sweep(X, 2, x0) / h0)^2)
g <- 0.5 * c_k * exp(-s / 2)
# Vektor pergeseran m(x)
m <- colSums(g * X) / sum(g) - x0
# Gradien dari rumus
grad_rumus <- 2 / (n * h0^(d + 2)) * sum(g) * m
# Gradien numerik dari f_K
eps <- 1e-5
grad_num <- sapply(1:d, function(j) {
e <- numeric(d); e[j] <- eps
(f_K(x0 + e, X, h0) - f_K(x0 - e, X, h0)) / (2 * eps)
})
kosinus <- sum(grad_rumus * grad_num) /
(sqrt(sum(grad_rumus^2)) * sqrt(sum(grad_num^2)))
cat("\nm(x0) =", round(m, 6), "\n")
##
## m(x0) = 2.936148 0.821226
cat("gradien dari rumus 7.5 =", grad_rumus, "\n")
## gradien dari rumus 7.5 = 0.001886652 0.0005276867
cat("gradien numerik =", grad_num, "\n")
## gradien numerik = 0.001886652 0.0005276867
cat(sprintf("kemiripan arah (cosine) = %.8f\n", kosinus))
## kemiripan arah (cosine) = 1.00000000
cat("sama:", isTRUE(all.equal(as.numeric(grad_rumus), as.numeric(grad_num), tolerance = 1e-4)), "\n")
## sama: TRUE
# Pembaruan: x_baru = x + m(x)
x_baru <- x0 + m
w <- exp(-rowSums(sweep(X, 2, x0)^2) / (2 * h0^2))
x_kode <- colSums(w * X) / sum(w)
cat("\nx_baru = x + m(x) =", round(x_baru, 6), "\n")
##
## x_baru = x + m(x) = 3.936148 1.821226
cat("rata-rata berbobot kode =", round(x_kode, 6), "\n")
## rata-rata berbobot kode = 3.936148 1.821226
cat("sama:", isTRUE(all.equal(x_baru, x_kode)), "\n")
## sama: TRUE
# 2. Fungsi bantu
# msClustering() meminta matriks d x n, jadi X (n x d) di-transpose dengan t(X)
jalankan_paket <- function(h) {
waktu <- system.time(
res <- msClustering(t(X), h = h, kernel = "gaussianKernel")
)
pusat <- t(res$components)
colnames(pusat) <- colnames(X)
list(h = h, res = res, labels = res$labels, pusat = pusat,
k = ncol(res$components), waktu = unname(waktu["elapsed"]))
}
gambar_hasil <- function(v) {
k <- v$k
pastel <- palet_pastel(k)
tua <- gelapkan(pastel)
plot(X[, 1], X[, 2], pch = 21, bg = pastel[v$labels], col = "gray40",
cex = 0.9, xlab = "Fitur 1", ylab = "Fitur 2",
main = paste0("library(MeanShift), h = ", v$h, " | ", k, " cluster"))
points(v$pusat[, 1], v$pusat[, 2], pch = 23, bg = tua, col = "black",
cex = 2, lwd = 1.4)
legend("topright", legend = c("Titik data", "Pusat cluster"),
pch = c(21, 23), pt.bg = c("gray85", "gray50"), col = c("gray40", "black"),
cex = 0.75, bg = adjustcolor("white", 0.85))
}
# Adjusted Rand Index (1 = pengelompokan identik)
ari <- function(a, b) {
tab <- table(a, b)
c2 <- function(x) x * (x - 1) / 2
s_ij <- sum(c2(tab)); s_a <- sum(c2(rowSums(tab))); s_b <- sum(c2(colSums(tab)))
tot <- c2(sum(tab)); ekspektasi <- s_a * s_b / tot
if (isTRUE(all.equal(s_ij, 0.5 * (s_a + s_b)))) return(1)
(s_ij - ekspektasi) / (0.5 * (s_a + s_b) - ekspektasi)
}
# Jarak terbesar dari pusat A ke pusat B terdekat
jarak_pusat_terdekat <- function(A, B) {
max(sapply(1:nrow(A), function(i)
min(sqrt(rowSums((B - matrix(A[i, ], nrow(B), ncol(A), byrow = TRUE))^2)))))
}
# 3. Mean Shift library dengan h = 1.9 terlebih dahulu
h_utama <- 1.9
cat("\n=== 3. library(MeanShift), h =", h_utama, "===\n")
##
## === 3. library(MeanShift), h = 1.9 ===
v_utama <- jalankan_paket(h_utama)
##
## Running mean-shift algorithm...
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 2% | |== | 3% | |== | 4% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |============== | 21% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |===================================== | 54% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |========================================================== | 84% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
##
## Mean-shift algorithm ran successfully.
## Finding clusters...
##
## The algorithm found 3 clusters.
print(v_utama$res)
## $components
## mode1 mode2 mode3
## Fitur1 4.634149 -2.693171 -6.778723
## Fitur2 1.961101 8.886893 -6.878164
##
## $labels
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [260] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [297] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [334] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [667] 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [741] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [778] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [815] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [852] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [889] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [926] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [963] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [1000] 3
cat("\nJumlah cluster :", v_utama$k, "\n")
##
## Jumlah cluster : 3
cat("Waktu hitung :", round(v_utama$waktu, 2), "detik\n")
## Waktu hitung : 213.04 detik
cat("Pusat cluster:\n"); print(round(v_utama$pusat, 3))
## Pusat cluster:
## Fitur1 Fitur2
## mode1 4.634 1.961
## mode2 -2.693 8.887
## mode3 -6.779 -6.878
cat("\nUkuran tiap cluster:\n"); print(table(Cluster = v_utama$labels))
##
## Ukuran tiap cluster:
## Cluster
## 1 2 3
## 334 333 333
cat("\nLabel paket vs kelompok asli:\n")
##
## Label paket vs kelompok asli:
print(table(Label_Paket = v_utama$labels, Kelompok_Asli = y_asli))
## Kelompok_Asli
## Label_Paket 1 2 3
## 1 334 0 0
## 2 0 333 0
## 3 0 0 333
cat("ARI terhadap kelompok asli:", round(ari(v_utama$labels, y_asli), 4), "\n")
## ARI terhadap kelompok asli: 1
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
gambar_hasil(v_utama)
# 4. Mean Shift library untuk semua h
H_LIST <- c(0.3, 0.4, 1.9, 6.0)
MAX_ITER <- 150
hasil_paket <- lapply(H_LIST, jalankan_paket)
##
## Running mean-shift algorithm...
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 2% | |== | 3% | |== | 4% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |============== | 21% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |===================================== | 54% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |========================================================== | 84% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
##
## Mean-shift algorithm ran successfully.
## Finding clusters...
##
## The algorithm found 209 clusters.
##
## Running mean-shift algorithm...
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 2% | |== | 3% | |== | 4% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |============== | 21% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |===================================== | 54% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |========================================================== | 84% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
##
## Mean-shift algorithm ran successfully.
## Finding clusters...
##
## The algorithm found 133 clusters.
##
## Running mean-shift algorithm...
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 2% | |== | 3% | |== | 4% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |============== | 21% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |===================================== | 54% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |========================================================== | 84% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
##
## Mean-shift algorithm ran successfully.
## Finding clusters...
##
## The algorithm found 3 clusters.
##
## Running mean-shift algorithm...
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 2% | |== | 3% | |== | 4% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |============== | 21% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |===================================== | 54% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |========================================================== | 84% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
##
## Mean-shift algorithm ran successfully.
## Finding clusters...
##
## The algorithm found 3 clusters.
names(hasil_paket) <- H_LIST
cat("\n=== 4. library(MeanShift), semua h ===\n")
##
## === 4. library(MeanShift), semua h ===
for (v in hasil_paket) {
cat(sprintf("\n--- h = %s: %d cluster (%.2f detik) ---\n", v$h, v$k, v$waktu))
print(v$res)
if (v$k <= 6) {
cat("pusat cluster:\n"); print(round(v$pusat, 3))
}
cat("ukuran tiap cluster:\n"); print(table(Cluster = v$labels))
}
##
## --- h = 0.3: 209 cluster (286.41 detik) ---
## $components
## mode1 mode2 mode3 mode4 mode5 mode6 mode7
## Fitur1 5.995074 4.207805 4.5060286 5.3657045 4.710421 5.915595 4.635356
## Fitur2 2.907650 1.814515 0.4313578 0.5716645 1.722906 2.000239 2.752674
## mode8 mode9 mode10 mode11 mode12 mode13 mode14 mode15
## Fitur1 6.561883 6.949351 3.275001 4.605469 5.367678 2.043547 2.257430 6.083479
## Fitur2 1.693574 2.363797 3.147584 2.119902 3.493670 1.167448 2.734638 1.228063
## mode16 mode17 mode18 mode19 mode20 mode21 mode22
## Fitur1 2.9459024 5.186532 3.981047 5.473218 5.850953 4.0586376 3.347459
## Fitur2 0.9411371 1.608369 1.790965 1.747714 3.885043 0.7173491 2.144670
## mode23 mode24 mode25 mode26 mode27 mode28 mode29 mode30
## Fitur1 4.215172 2.284361 4.784149 5.146209 3.888750 4.306753 5.135074 5.293330
## Fitur2 3.421381 3.237853 3.389965 3.763811 4.421869 2.369093 2.828299 2.106038
## mode31 mode32 mode33 mode34 mode35 mode36 mode37
## Fitur1 1.706913 5.416969 5.650216 3.568151 3.760221 5.150073 3.657373
## Fitur2 2.498352 1.388414 2.096163 1.340022 2.665897 0.182295 0.507497
## mode38 mode39 mode40 mode41 mode42 mode43 mode44
## Fitur1 4.7143870 3.568302 3.71958675 4.553074 3.16029 7.401891 4.701958
## Fitur2 -0.1884245 4.019898 -0.02338692 2.333532 1.72651 1.749086 4.970678
## mode45 mode46 mode47 mode48 mode49 mode50 mode51
## Fitur1 2.675323 5.2469739 6.1158023 5.9008990 4.851463 4.115640 4.901178
## Fitur2 4.098029 0.8884418 -0.0989552 0.5422158 4.241892 4.041395 5.224257
## mode52 mode53 mode54 mode55 mode56 mode57 mode58
## Fitur1 5.73665465 2.703952 6.754410 3.5173853 6.736995 6.750757 2.849471
## Fitur2 0.05434907 1.723496 1.323805 0.8933149 3.381726 2.963689 3.533437
## mode59 mode60 mode61 mode62 mode63 mode64 mode65
## Fitur1 2.003593 6.080594 3.043319 7.158778 2.587576 3.665641 6.5071112
## Fitur2 2.986840 4.220918 2.854524 3.001039 1.375828 -1.017933 0.7152373
## mode66 mode67 mode68 mode69 mode70 mode71 mode72
## Fitur1 -3.821237 -2.416746 -1.936332 -2.018564 -2.374944 -3.629517 -1.953602
## Fitur2 9.677645 9.733043 9.250599 7.859494 8.404613 9.056212 5.971523
## mode73 mode74 mode75 mode76 mode77 mode78 mode79
## Fitur1 -3.530390 -1.864009 -3.656027 -1.526666 -3.185181 -2.853332 -3.132006
## Fitur2 7.954325 8.638109 8.871082 7.280472 7.689945 9.277651 8.718663
## mode80 mode81 mode82 mode83 mode84 mode85 mode86
## Fitur1 -2.539895 -2.924889 -3.282023 -3.728286 -3.478659 -4.771785 -2.437266
## Fitur2 10.642487 10.469261 10.656522 8.373683 8.235907 9.178890 9.323977
## mode87 mode88 mode89 mode90 mode91 mode92 mode93
## Fitur1 -2.477051 -3.746634 -2.726311 -0.8782368 -1.728943 -3.058102 -1.228973
## Fitur2 8.876407 7.820763 6.391231 9.6036647 8.153586 8.061726 9.278484
## mode94 mode95 mode96 mode97 mode98 mode99 mode100
## Fitur1 -1.218250 -1.921215 -3.242780 -2.814421 -3.297055 -0.9131051 -4.207336
## Fitur2 7.812322 10.445466 8.866783 7.382510 10.416606 9.1067380 8.861807
## mode101 mode102 mode103 mode104 mode105 mode106 mode107
## Fitur1 -4.853132 -4.205066 -4.563974 -4.825401 -2.403000 -2.135981 -3.067006
## Fitur2 6.866624 8.056759 9.060499 7.987688 7.493676 9.966675 11.506260
## mode108 mode109 mode110 mode111 mode112 mode113 mode114
## Fitur1 -0.9375347 -3.584180 -2.844388 -0.8247736 -4.891859 -1.906374 -1.316301
## Fitur2 8.8358021 9.419437 10.016256 10.2797713 8.709170 7.425234 10.034424
## mode115 mode116 mode117 mode118 mode119 mode120 mode121
## Fitur1 -0.9269709 -3.471169 0.611138 -5.152303 -2.868604 -3.476672 -4.733335
## Fitur2 8.2896890 11.117015 9.520334 9.573506 11.529837 6.675324 9.623131
## mode122 mode123 mode124 mode125 mode126 mode127 mode128
## Fitur1 -1.798640 -1.400831 -0.6852837 -3.806494 0.07375279 -1.152763 -1.140608
## Fitur2 6.970677 9.582343 8.6768135 6.903332 9.35769053 8.583540 6.445723
## mode129 mode130 mode131 mode132 mode133 mode134 mode135
## Fitur1 -0.4463003 -5.558780 -1.459162 -2.828238 -4.110511 -3.834752 -0.8288998
## Fitur2 8.8326087 9.060214 10.438225 10.858009 7.609511 10.251538 8.1245116
## mode136 mode137 mode138 mode139 mode140 mode141 mode142
## Fitur1 -3.707734 -4.527107 -5.971739 0.8953043 -3.966856 -0.2711767 -7.756309
## Fitur2 10.911122 7.716963 9.732288 8.6708098 7.258294 9.4895042 -3.215341
## mode143 mode144 mode145 mode146 mode147 mode148 mode149
## Fitur1 -7.495571 -7.194343 -7.214110 -6.015276 -6.714206 -6.248325 -8.190521
## Fitur2 -8.725236 -6.912134 -5.363046 -8.943909 -6.719876 -7.288053 -7.791550
## mode150 mode151 mode152 mode153 mode154 mode155 mode156
## Fitur1 -6.190335 -7.278548 -9.334864 -7.905011 -6.070479 -6.150717 -7.886172
## Fitur2 -5.530774 -8.159993 -5.385467 -6.194760 -8.147390 -6.618700 -5.687952
## mode157 mode158 mode159 mode160 mode161 mode162 mode163
## Fitur1 -6.920670 -7.438674 -8.537268 -5.866330 -5.303303 -7.690021 -7.683977
## Fitur2 -6.031561 -6.552176 -5.977218 -5.884939 -6.696930 -6.518839 -5.349597
## mode164 mode165 mode166 mode167 mode168 mode169 mode170
## Fitur1 -6.904344 -8.501720 -6.775373 -6.237470 -6.795144 -6.467247 -5.848537
## Fitur2 -7.713958 -8.559747 -5.718629 -4.982765 -6.990959 -7.621624 -7.203785
## mode171 mode172 mode173 mode174 mode175 mode176 mode177
## Fitur1 -5.878616 -7.710136 -6.775917 -7.231053 -8.486923 -8.103045 -4.332590
## Fitur2 -6.420869 -7.859829 -7.425120 -4.599762 -7.670470 -7.181855 -6.235414
## mode178 mode179 mode180 mode181 mode182 mode183 mode184
## Fitur1 -7.450757 -6.900155 -5.562566 -8.199018 -5.863396 -4.447534 -9.403568
## Fitur2 -7.536064 -5.371373 -7.940991 -9.036885 -5.090053 -7.225149 -6.015087
## mode185 mode186 mode187 mode188 mode189 mode190 mode191
## Fitur1 -6.042186 -7.865211 -5.306675 -7.117603 -5.232170 -4.951804 -9.124182
## Fitur2 -4.641673 -7.282232 -7.321152 -9.100770 -4.725664 -5.700034 -6.365768
## mode192 mode193 mode194 mode195 mode196 mode197 mode198
## Fitur1 -7.685967 -6.526779 -7.771699 -8.907607 -4.177243 -5.835612 -6.822340
## Fitur2 -4.926433 -5.950369 -8.638436 -6.944524 -4.998237 -4.810021 -8.695465
## mode199 mode200 mode201 mode202 mode203 mode204 mode205
## Fitur1 -9.078994 -7.785329 -6.084431 -4.102419 -8.492495 -4.869330 -4.987893
## Fitur2 -5.740145 -8.899795 -6.301833 -7.748984 -6.908771 -8.584867 -6.810264
## mode206 mode207 mode208 mode209
## Fitur1 -4.464521 -5.162378 -5.095699 -6.721470
## Fitur2 -4.456399 -5.252218 -8.344875 -9.148832
##
## $labels
## [1] 1 2 3 4 5 5 6 7 8 5 1 9 10 3 11 12 7 13
## [19] 14 15 2 10 5 1 8 3 5 16 17 18 17 19 20 21 17 22
## [37] 23 18 24 3 25 2 19 21 22 26 27 15 28 12 17 18 8 29
## [55] 25 29 30 5 31 5 2 25 29 6 18 1 25 32 33 30 34 5
## [73] 30 35 23 36 32 17 37 34 15 5 38 11 34 12 7 3 33 32
## [91] 1 2 17 6 22 18 39 34 5 4 6 1 40 8 21 25 23 41
## [109] 25 5 7 5 28 2 42 28 21 43 22 5 22 42 25 35 44 2
## [127] 35 45 22 5 46 2 25 1 47 34 5 48 28 38 11 18 2 5
## [145] 28 6 2 3 4 37 7 42 6 3 2 35 5 18 2 1 5 35
## [163] 7 21 30 6 35 29 5 33 5 19 16 15 4 7 10 17 46 5
## [181] 49 50 36 17 25 22 12 17 35 22 51 7 3 34 35 52 36 46
## [199] 8 25 53 30 6 54 10 55 18 18 28 25 35 56 7 5 30 25
## [217] 3 6 5 10 29 28 23 37 29 3 29 11 35 6 3 52 35 2
## [235] 2 2 15 5 5 40 18 1 20 6 22 57 33 5 36 37 35 3
## [253] 10 3 6 18 18 11 35 2 19 33 17 58 38 1 19 41 59 7
## [271] 17 25 3 29 2 52 36 22 60 6 1 61 2 29 41 30 62 35
## [289] 63 30 21 29 18 9 41 2 41 29 5 10 25 32 5 29 5 5
## [307] 29 32 40 7 3 21 64 35 30 28 35 5 55 6 23 3 5 5
## [325] 65 35 32 25 18 7 12 28 35 11 66 67 68 69 70 71 72 73
## [343] 66 74 75 67 70 66 76 77 76 78 79 80 78 81 82 83 68 84
## [361] 66 77 73 85 78 86 87 70 75 81 75 77 73 88 69 77 89 90
## [379] 86 79 91 92 93 78 78 75 86 93 78 86 80 94 95 75 96 96
## [397] 70 89 70 96 97 68 70 98 68 70 71 99 66 100 101 69 92 78
## [415] 70 92 102 103 92 70 104 105 106 76 87 70 69 78 78 80 68 78
## [433] 107 84 73 70 108 109 78 75 91 110 67 70 109 78 110 68 88 66
## [451] 91 78 82 105 81 111 70 70 91 70 86 73 112 75 87 71 95 74
## [469] 70 86 66 78 78 113 114 68 66 115 76 70 104 116 70 74 66 117
## [487] 118 119 78 82 78 113 120 121 70 87 80 68 70 122 104 83 86 78
## [505] 68 71 74 96 71 78 80 88 98 66 76 74 83 69 97 83 70 78
## [523] 122 78 123 78 67 86 80 70 105 78 93 91 96 93 86 78 67 89
## [541] 80 109 84 94 114 71 66 108 124 116 125 126 86 86 86 127 110 128
## [559] 70 74 71 86 123 97 93 126 95 78 80 79 129 130 70 86 105 100
## [577] 70 70 114 106 131 75 78 105 70 82 127 77 100 106 113 74 109 132
## [595] 83 95 70 91 69 79 87 100 106 68 75 104 133 125 93 87 134 68
## [613] 121 78 91 78 93 135 75 136 73 95 74 131 91 68 68 87 109 79
## [631] 106 99 90 137 84 114 109 100 74 90 124 68 113 95 86 138 122 78
## [649] 74 77 66 114 70 139 95 76 68 79 78 91 114 69 66 111 140 77
## [667] 141 142 143 144 145 146 144 147 148 149 144 150 151 152 153 154 151 144
## [685] 147 150 144 155 150 156 157 158 155 159 160 161 162 145 163 164 145 147
## [703] 165 166 147 159 167 166 168 168 169 169 158 170 157 157 171 170 151 162
## [721] 172 153 159 155 164 169 173 155 174 172 146 148 175 146 175 168 164 157
## [739] 160 176 151 177 149 178 147 169 144 164 171 164 169 169 155 150 164 158
## [757] 173 172 166 168 179 172 157 156 174 169 147 160 148 157 170 180 181 171
## [775] 148 182 172 183 184 168 157 179 185 147 178 180 168 148 172 162 145 186
## [793] 169 149 153 147 165 144 144 187 164 144 178 169 188 144 157 160 189 158
## [811] 164 157 190 167 159 145 191 164 169 192 153 187 172 169 147 148 169 160
## [829] 161 193 168 162 156 157 157 194 155 144 169 148 163 171 195 193 187 155
## [847] 150 144 169 170 149 155 162 157 196 150 164 197 144 148 179 191 167 144
## [865] 178 198 160 169 160 155 157 150 168 176 147 199 186 168 157 157 160 162
## [883] 184 155 173 179 198 159 162 155 173 176 167 148 168 164 187 147 180 166
## [901] 161 179 160 145 172 171 183 144 187 144 155 200 193 158 149 169 187 151
## [919] 162 163 158 201 154 154 169 157 164 201 144 162 149 202 203 168 204 171
## [937] 198 148 205 169 151 187 205 172 154 164 148 148 179 169 162 176 155 173
## [955] 157 165 158 147 157 168 155 147 169 144 144 157 155 155 206 162 158 201
## [973] 207 160 158 178 161 161 198 208 198 163 157 209 162 144 144 169 151 193
## [991] 148 144 157 177 187 187 147 172 155 147
##
## ukuran tiap cluster:
## Cluster
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 11 19 16 4 33 14 12 5 2 7 6 5 1 1 5 2 11 14 5 2
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 7 10 5 1 15 1 1 9 13 9 1 6 5 6 18 5 4 3 1 3
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 5 3 1 1 1 3 1 1 1 1 1 3 1 1 2 1 1 1 1 1
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 1 1 1 1 1 13 5 15 7 29 7 1 6 10 10 6 7 30 6 8
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 3 4 5 4 1 15 7 3 3 3 9 4 7 2 7 5 3 2 2 5
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 1 1 1 4 5 5 1 2 6 3 2 1 4 6 1 2 1 1 1 1
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
## 2 3 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1
## 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
## 1 1 1 22 6 3 15 13 6 7 7 1 4 4 17 3 21 9 5 10
## 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## 5 12 4 13 3 4 4 12 21 4 6 10 5 2 2 4 2 5 6 3
## 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
## 1 1 2 2 1 2 9 1 1 1 2 1 4 1 1 1 1 5 1 1
## 201 202 203 204 205 206 207 208 209
## 3 1 1 1 2 1 1 1 1
##
## --- h = 0.4: 133 cluster (497.08 detik) ---
## $components
## mode1 mode2 mode3 mode4 mode5 mode6 mode7
## Fitur1 5.905634 4.163254 4.5283680 5.2095188 4.700750 5.708768 4.625958
## Fitur2 2.890752 1.802808 0.4346715 0.8499062 1.669928 2.082461 2.747359
## mode8 mode9 mode10 mode11 mode12 mode13 mode14 mode15
## Fitur1 6.557587 6.949296 3.277582 5.356263 2.044043 2.231896 6.059775 2.9469295
## Fitur2 1.684571 2.363977 3.139695 3.479995 1.167636 2.763349 1.215677 0.9415619
## mode16 mode17 mode18 mode19 mode20 mode21 mode22 mode23
## Fitur1 5.197546 5.853376 4.0590248 3.413184 4.238188 2.264776 4.789730 3.891612
## Fitur2 1.611477 3.890655 0.7257598 2.188667 3.430200 3.217093 3.390263 4.412879
## mode24 mode25 mode26 mode27 mode28 mode29 mode30
## Fitur1 4.459539 5.117496 1.707578 3.567242 3.746015 5.1634425 3.7243828
## Fitur2 2.338305 2.791558 2.499067 1.367033 2.652534 0.2120218 0.5764522
## mode31 mode32 mode33 mode34 mode35 mode36 mode37
## Fitur1 4.7068890 3.572025 3.697015e+00 7.401830 4.738402 2.675460 5.77506943
## Fitur2 -0.2143296 4.020270 -1.049616e-05 1.749126 5.017063 4.097584 0.06223859
## mode38 mode39 mode40 mode41 mode42 mode43 mode44 mode45
## Fitur1 5.8864748 4.852170 4.108785 4.864732 6.738001 6.764744 2.041760 6.061720
## Fitur2 0.5461079 4.240447 4.039988 5.177867 3.368431 2.975881 2.979597 4.179303
## mode46 mode47 mode48 mode49 mode50 mode51 mode52
## Fitur1 7.143315 2.598224 3.665641 -3.784084 -2.845908 -1.939951 -2.003966
## Fitur2 2.999893 1.404295 -1.017933 9.660904 9.234309 9.235804 7.878434
## mode53 mode54 mode55 mode56 mode57 mode58 mode59
## Fitur1 -2.382470 -3.618991 -1.953607 -3.537512 -1.893498 -1.559573 -3.178964
## Fitur2 8.414936 8.951827 5.971526 8.203152 8.640154 7.275506 7.727683
## mode60 mode61 mode62 mode63 mode64 mode65 mode66
## Fitur1 -2.521192 -2.803184 -3.274171 -3.671902 -4.219166 -2.924288 -2.735772
## Fitur2 10.593518 9.983185 10.602616 8.350719 8.846793 10.428283 6.374512
## mode67 mode68 mode69 mode70 mode71 mode72 mode73
## Fitur1 -0.8922341 -1.738109 -1.237824 -1.245352 -1.924677 -2.790183 -4.853132
## Fitur2 9.5895751 8.143199 9.269210 7.815755 10.449699 7.447379 6.866624
## mode74 mode75 mode76 mode77 mode78 mode79 mode80
## Fitur1 -4.776874 -2.421456 -2.969747 -0.8318485 -4.862544 -1.912733 -1.34286
## Fitur2 8.027817 7.501691 11.517369 10.2772076 8.699512 7.461891 10.03835
## mode81 mode82 mode83 mode84 mode85 mode86 mode87
## Fitur1 0.6077382 -5.118976 -3.526005 -4.737953 -1.766747 -0.7293976 -3.80263
## Fitur2 9.5196272 9.579321 6.721781 9.616408 7.039805 8.7139250 6.90830
## mode88 mode89 mode90 mode91 mode92 mode93 mode94
## Fitur1 0.06158277 -1.140633 -5.558715 -5.971738 0.8953042 -3.959804 -7.756309
## Fitur2 9.36146134 6.445742 9.060286 9.732286 8.6708099 7.245371 -3.215341
## mode95 mode96 mode97 mode98 mode99 mode100 mode101
## Fitur1 -7.240890 -7.189106 -7.165101 -6.014515 -6.752953 -6.439552 -8.215106
## Fitur2 -8.128388 -6.913440 -5.369222 -8.943293 -6.751657 -7.584224 -7.777631
## mode102 mode103 mode104 mode105 mode106 mode107 mode108
## Fitur1 -6.156728 -9.329517 -6.124716 -7.876715 -6.919176 -8.518383 -5.836968
## Fitur2 -5.533051 -5.393308 -6.576546 -5.708989 -6.056061 -5.965541 -5.875261
## mode109 mode110 mode111 mode112 mode113 mode114 mode115
## Fitur1 -5.358183 -8.526474 -6.247163 -7.678696 -7.239340 -7.916264 -4.332593
## Fitur2 -6.739604 -8.536988 -4.984643 -7.809691 -4.585419 -7.285549 -6.235414
## mode116 mode117 mode118 mode119 mode120 mode121 mode122
## Fitur1 -7.488120 -5.579731 -8.192491 -4.447830 -9.395184 -5.320729 -6.831641
## Fitur2 -7.562363 -7.859262 -9.029277 -7.224976 -6.017755 -7.329338 -8.693520
## mode123 mode124 mode125 mode126 mode127 mode128 mode129
## Fitur1 -5.232370 -9.129072 -8.893100 -4.177361 -9.105793 -4.103068 -4.905129
## Fitur2 -4.727267 -6.359738 -6.942723 -4.998016 -5.754065 -7.747949 -8.546912
## mode130 mode131 mode132 mode133
## Fitur1 -4.464404 -5.164487 -5.062047 -6.754621
## Fitur2 -4.456621 -5.263256 -8.380852 -9.101493
##
## $labels
## [1] 1 2 3 4 5 5 6 7 8 5 1 9 10 3 5 11 7 12
## [19] 13 14 2 10 5 1 8 3 5 15 16 2 16 16 17 18 16 19
## [37] 20 2 21 3 22 5 16 18 19 11 23 14 24 11 5 2 8 25
## [55] 22 25 6 5 26 5 2 22 25 6 2 1 22 16 6 6 27 5
## [73] 6 28 20 29 16 16 30 27 14 5 31 5 27 11 7 3 6 16
## [91] 1 2 16 6 19 2 32 27 5 4 6 1 33 8 18 22 20 24
## [109] 22 5 7 5 24 2 19 24 18 34 19 5 19 19 22 28 35 5
## [127] 28 36 28 5 4 2 22 1 37 27 5 38 24 31 5 2 2 5
## [145] 24 6 2 3 4 30 7 19 6 3 2 28 5 2 2 1 5 28
## [163] 7 18 6 6 28 25 5 6 5 16 15 14 4 7 10 16 4 5
## [181] 39 40 29 5 22 19 11 16 28 19 41 7 3 27 28 37 29 4
## [199] 8 22 19 5 6 8 10 18 2 2 24 22 28 42 7 5 6 22
## [217] 3 6 5 28 25 24 20 30 25 3 25 5 28 6 3 37 28 2
## [235] 5 2 14 5 5 33 2 1 17 6 19 43 6 5 29 18 28 3
## [253] 10 3 6 2 2 5 28 2 16 6 16 10 31 1 16 24 44 7
## [271] 16 22 3 25 2 37 29 19 45 6 1 10 2 25 5 6 46 28
## [289] 47 5 5 25 2 9 24 2 24 25 5 10 22 16 5 25 5 5
## [307] 25 16 33 7 3 18 48 28 6 24 28 5 18 6 20 3 5 5
## [325] 14 28 16 22 2 7 11 24 28 5 49 50 51 52 53 54 55 56
## [343] 49 57 54 50 53 49 58 59 58 50 50 60 50 61 62 63 51 56
## [361] 49 59 56 64 50 50 50 53 54 65 54 59 56 56 52 59 66 67
## [379] 50 50 68 59 69 50 50 54 50 69 50 50 60 70 71 54 50 50
## [397] 53 66 53 50 72 51 53 62 51 53 54 69 49 64 73 52 59 50
## [415] 53 59 56 64 59 53 74 75 50 58 50 53 52 50 50 50 51 50
## [433] 76 56 56 53 69 54 50 54 68 61 50 53 49 50 61 51 56 49
## [451] 68 50 62 75 65 77 53 53 68 53 50 56 78 54 53 54 71 57
## [469] 53 50 54 50 50 79 80 51 49 69 58 53 74 62 53 57 49 81
## [487] 82 76 50 62 50 79 83 84 53 50 60 51 53 85 74 63 50 50
## [505] 51 54 57 50 54 50 60 56 62 49 58 57 56 52 72 63 53 50
## [523] 85 50 69 50 50 50 60 53 75 50 69 68 50 69 50 50 50 66
## [541] 60 54 56 70 80 54 49 69 86 62 87 88 50 50 50 69 61 89
## [559] 53 53 54 50 69 72 69 88 71 50 60 50 86 90 53 50 75 64
## [577] 53 53 80 50 71 54 50 75 53 62 69 59 64 50 79 57 54 60
## [595] 63 71 53 68 52 50 50 64 50 51 54 74 56 87 69 50 49 51
## [613] 84 50 68 50 69 69 54 62 56 71 57 80 68 57 51 53 54 50
## [631] 50 69 67 74 56 80 54 64 57 67 86 51 79 71 50 91 85 50
## [649] 57 59 49 80 53 92 71 58 51 50 50 68 80 52 49 77 93 59
## [667] 88 94 95 96 97 98 96 99 100 101 96 102 95 103 96 100 95 96
## [685] 99 102 96 104 102 105 106 96 104 107 108 109 96 97 97 100 97 99
## [703] 110 106 99 107 111 106 96 99 100 100 96 100 106 106 104 100 95 96
## [721] 112 96 107 99 100 100 96 99 113 112 98 100 101 98 101 96 100 106
## [739] 108 114 95 115 101 116 99 100 96 100 104 100 100 100 99 102 100 96
## [757] 100 112 106 96 97 112 106 105 113 100 99 108 100 106 100 117 118 104
## [775] 100 102 112 119 120 96 106 97 111 99 112 117 96 100 112 96 97 114
## [793] 100 101 96 99 110 96 96 121 100 96 116 100 122 96 106 108 123 96
## [811] 100 106 108 111 107 97 124 100 100 97 96 121 112 100 99 100 100 108
## [829] 109 106 96 96 105 106 106 95 104 96 100 100 97 104 125 106 121 104
## [847] 102 96 100 100 101 104 96 106 126 102 100 111 96 100 97 124 111 96
## [865] 116 122 108 100 108 104 106 102 96 114 99 127 114 96 106 106 108 96
## [883] 120 104 100 97 122 107 96 104 100 114 111 104 96 100 121 99 117 106
## [901] 109 97 108 97 112 104 119 96 121 96 104 95 106 96 101 100 121 95
## [919] 96 97 96 104 100 100 100 106 100 104 96 96 101 128 114 96 129 104
## [937] 122 100 109 100 95 121 109 112 100 100 100 100 97 100 96 114 104 100
## [955] 106 110 96 99 106 96 104 99 100 96 96 106 104 104 130 96 96 104
## [973] 131 108 96 116 109 109 122 132 122 97 106 133 96 96 96 100 95 106
## [991] 100 96 106 115 121 121 99 112 104 99
##
## ukuran tiap cluster:
## Cluster
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 11 30 16 7 48 26 12 6 2 8 6 1 1 6 2 20 2 9 13 5
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 1 15 1 13 13 1 6 20 5 3 3 1 3 1 1 1 4 1 1 1
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 1 1 1 1 1 1 1 1 14 72 14 7 32 23 1 16 10 6 11 8
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 4 9 4 7 2 3 3 9 17 2 8 3 1 5 5 2 2 1 4 7
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 1 1 1 2 3 3 2 3 1 1 1 1 1 1 10 59 17 3 19 58
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 8 8 1 24 3 29 5 11 7 3 6 11 2 7 2 4 3 1 2 2
## 121 122 123 124 125 126 127 128 129 130 131 132 133
## 9 6 1 2 1 1 1 1 1 1 1 1 1
##
## --- h = 1.9: 3 cluster (215.89 detik) ---
## $components
## mode1 mode2 mode3
## Fitur1 4.634149 -2.693171 -6.778723
## Fitur2 1.961101 8.886893 -6.878164
##
## $labels
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [260] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [297] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [334] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [667] 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [741] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [778] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [815] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [852] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [889] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [926] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [963] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [1000] 3
##
## pusat cluster:
## Fitur1 Fitur2
## mode1 4.634 1.961
## mode2 -2.693 8.887
## mode3 -6.779 -6.878
## ukuran tiap cluster:
## Cluster
## 1 2 3
## 334 333 333
##
## --- h = 6: 3 cluster (44.30 detik) ---
## $components
## mode1 mode2 mode3
## Fitur1 4.678572 -2.639221 -6.800434
## Fitur2 1.983716 8.890106 -6.824222
##
## $labels
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [260] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [297] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [334] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [667] 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [741] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [778] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [815] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [852] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [889] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [926] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [963] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [1000] 3
##
## pusat cluster:
## Fitur1 Fitur2
## mode1 4.679 1.984
## mode2 -2.639 8.890
## mode3 -6.800 -6.824
## ukuran tiap cluster:
## Cluster
## 1 2 3
## 334 333 333
par(mfrow = c(2, 2), mar = c(4.2, 4.2, 3.2, 1))
for (v in hasil_paket) gambar_hasil(v)
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
# 5. Mean Shift manual (kernel Gaussian) dengan riwayat iterasi
mean_shift_riwayat <- function(data, h, max_iter = 150, tol = 1e-4) {
P <- data
riwayat <- list(P) # riwayat[[1]] = iterasi ke-0
for (it in 1:max_iter) {
d2 <- outer(P[, 1], data[, 1], "-")^2 + outer(P[, 2], data[, 2], "-")^2
w <- exp(-d2 / (2 * h^2))
P_baru <- (w %*% data) / rowSums(w)
geser <- max(abs(P_baru - P))
P <- P_baru
riwayat[[length(riwayat) + 1]] <- P
if (geser < tol) break
}
riwayat
}
batas_x <- c(-11, 8.5)
batas_y <- c(-12, 14)
siapkan_animasi <- function(h, max_iter = 150) {
riwayat_asli <- mean_shift_riwayat(X, h, max_iter = max_iter)
akhir <- riwayat_asli[[length(riwayat_asli)]]
iterasi <- length(riwayat_asli) - 1
# frame antara agar gerakan halus bila konvergen cepat
sub <- if (length(riwayat_asli) < 20) 4 else 1
riwayat <- list()
for (i in 1:(length(riwayat_asli) - 1)) {
a_ <- riwayat_asli[[i]]; b_ <- riwayat_asli[[i + 1]]
for (j in 0:(sub - 1)) riwayat[[length(riwayat) + 1]] <- a_ + (b_ - a_) * j / sub
}
riwayat[[length(riwayat) + 1]] <- akhir
nf <- length(riwayat)
# label cluster: single linkage, dipotong pada jarak 0.2
label <- cutree(hclust(dist(akhir), method = "single"), h = 0.2)
k <- max(label)
# warna
pastel <- palet_pastel(k)
tua <- gelapkan(pastel)
warna <- pastel[label]
pusat <- t(sapply(1:k, function(cl) colMeans(akhir[label == cl, , drop = FALSE])))
if (k == 1) pusat <- matrix(pusat, nrow = 1)
colnames(pusat) <- c("Fitur1", "Fitur2")
# permukaan kepadatan
gx <- seq(batas_x[1], batas_x[2], length.out = 130)
gy <- seq(batas_y[1], batas_y[2], length.out = 130)
ex <- exp(-outer(gx, X[, 1], "-")^2 / (2 * h^2))
ey <- exp(-outer(gy, X[, 2], "-")^2 / (2 * h^2))
kde <- ex %*% t(ey) # baris = gx, kolom = gy
# lintasan setiap titik ke-12
trail_idx <- seq(1, n, by = 12)
jx <- sapply(riwayat, function(P) P[trail_idx, 1])
jy <- sapply(riwayat, function(P) P[trail_idx, 2])
# frame yang ditampilkan
langkah <- max(1, ceiling(nf / 45))
frames <- sort(unique(c(seq(0, nf - 1, by = langkah), nf - 1)))
frames <- c(frames, rep(nf - 1, 10))
list(h = h, riwayat = riwayat, nf = nf, sub = sub, iterasi = iterasi,
k = k, label = label, akhir = akhir, warna = warna, pusat = pusat,
tua = tua, gx = gx, gy = gy, kde = kde, jx = jx, jy = jy, frames = frames)
}
# Menggambar satu frame
gambar_frame <- function(ob, f) {
par(mar = c(4.2, 4.2, 3.6, 1))
terakhir <- (f == ob$nf - 1)
judul <- paste0("Mean Shift (kernel Gaussian), h = ", ob$h,
"\nIterasi ke-", min(f %/% ob$sub, ob$iterasi),
if (terakhir) paste0(" | ", ob$k, " cluster") else "")
plot(NA, xlim = batas_x, ylim = batas_y, xlab = "Fitur 1", ylab = "Fitur 2",
main = judul, font.main = 2, cex.main = 1)
# kontur kepadatan
tingkat <- seq(min(ob$kde), max(ob$kde), length.out = 15)
.filled.contour(ob$gx, ob$gy, ob$kde, levels = tingkat,
col = adjustcolor(colorRampPalette(c("#f7fbff", "#08306b"))(14),
alpha.f = 0.35))
contour(ob$gx, ob$gy, ob$kde, levels = tingkat, add = TRUE, drawlabels = FALSE,
col = adjustcolor("white", 0.6), lwd = 0.4)
# data asli (diam) dan lintasan
points(X[, 1], X[, 2], pch = 16, cex = 0.5, col = "#bdbdbd")
if (f >= 1) {
matlines(t(ob$jx[, 1:(f + 1)]), t(ob$jy[, 1:(f + 1)]),
lty = 1, lwd = 0.6, col = adjustcolor("gray40", 0.55))
}
# titik yang bergeser
P <- ob$riwayat[[f + 1]]
points(P[, 1], P[, 2], pch = 21, bg = ob$warna, col = "#555555", cex = 0.9, lwd = 0.5)
isi_legend <- c("Data asli (diam)", "Titik yang bergeser")
pch_l <- c(16, 21); bg_l <- c(NA, "gray85"); col_l <- c("#bdbdbd", "#555555")
if (terakhir) {
points(ob$pusat[, 1], ob$pusat[, 2], pch = 23, bg = ob$tua, col = "black",
cex = 2.2, lwd = 1.4)
isi_legend <- c(isi_legend, "Pusat cluster")
pch_l <- c(pch_l, 23); bg_l <- c(bg_l, "gray50"); col_l <- c(col_l, "black")
}
legend("topright", legend = isi_legend, pch = pch_l, pt.bg = bg_l, col = col_l,
cex = 0.75, bg = adjustcolor("white", 0.85))
}
# Hitung hasil manual untuk semua h (belum membuat GIF)
hasil_manual <- lapply(H_LIST, siapkan_animasi, max_iter = MAX_ITER)
names(hasil_manual) <- H_LIST
cat("\n=== 5. Mean Shift manual, semua h ===\n")
##
## === 5. Mean Shift manual, semua h ===
ringkas_manual <- data.frame(
h = H_LIST,
iterasi = sapply(hasil_manual, function(v) v$iterasi),
jumlah_cluster = sapply(hasil_manual, function(v) v$k),
konvergen = sapply(hasil_manual, function(v)
if (v$iterasi < MAX_ITER) "ya" else "belum (batas iterasi)"),
row.names = NULL
)
print(ringkas_manual)
## h iterasi jumlah_cluster konvergen
## 1 0.3 140 17 ya
## 2 0.4 69 5 ya
## 3 1.9 8 3 ya
## 4 6.0 50 1 ya
for (v in hasil_manual) {
cat(sprintf("\nh = %s: %d iterasi, %d cluster\n", v$h, v$iterasi, v$k))
if (v$k <= 6) {
cat("pusat cluster:\n"); print(round(v$pusat, 3))
}
}
##
## h = 0.3: 140 iterasi, 17 cluster
##
## h = 0.4: 69 iterasi, 5 cluster
## pusat cluster:
## Fitur1 Fitur2
## [1,] 4.531 1.800
## [2,] 4.773 4.948
## [3,] -2.726 8.971
## [4,] -7.754 -3.223
## [5,] -6.891 -6.862
##
## h = 1.9: 8 iterasi, 3 cluster
## pusat cluster:
## Fitur1 Fitur2
## [1,] 4.681 1.979
## [2,] -2.644 8.894
## [3,] -6.799 -6.830
##
## h = 6: 50 iterasi, 1 cluster
## pusat cluster:
## Fitur1 Fitur2
## [1,] 0.823 4.598
# 6. Perbandingan library vs manual
cat("\n=== 6. Perbandingan library vs manual ===\n")
##
## === 6. Perbandingan library vs manual ===
perbandingan <- data.frame(
h = H_LIST,
cluster_paket = sapply(hasil_paket, function(v) v$k),
cluster_manual = sapply(hasil_manual, function(v) v$k),
ARI_paket_vs_manual = sapply(as.character(H_LIST), function(h)
round(ari(hasil_paket[[h]]$labels, hasil_manual[[h]]$label), 4)),
selisih_pusat_maks = sapply(as.character(H_LIST), function(h)
round(jarak_pusat_terdekat(hasil_paket[[h]]$pusat, hasil_manual[[h]]$pusat), 4)),
row.names = NULL
)
print(perbandingan)
## h cluster_paket cluster_manual ARI_paket_vs_manual selisih_pusat_maks
## 1 0.3 209 17 0.0517 2.9416
## 2 0.4 133 5 0.0937 3.6342
## 3 1.9 3 3 1.0000 0.0525
## 4 6.0 3 1 0.0000 13.7322
cat("\nKecocokan dengan kelompok asli (ARI):\n")
##
## Kecocokan dengan kelompok asli (ARI):
print(data.frame(
h = H_LIST,
ARI_paket = sapply(hasil_paket, function(v) round(ari(v$labels, y_asli), 4)),
ARI_manual = sapply(hasil_manual, function(v) round(ari(v$label, y_asli), 4)),
row.names = NULL
))
## h ARI_paket ARI_manual
## 1 0.3 0.0398 0.8577
## 2 0.4 0.0929 0.9955
## 3 1.9 1.0000 1.0000
## 4 6.0 1.0000 0.0000
cat("\nPusat cluster h = 1.9 (paket vs manual vs pusat asli):\n")
##
## Pusat cluster h = 1.9 (paket vs manual vs pusat asli):
cat("paket:\n"); print(round(hasil_paket[["1.9"]]$pusat, 3))
## paket:
## Fitur1 Fitur2
## mode1 4.634 1.961
## mode2 -2.693 8.887
## mode3 -6.779 -6.878
cat("manual:\n"); print(round(hasil_manual[["1.9"]]$pusat, 3))
## manual:
## Fitur1 Fitur2
## [1,] 4.681 1.979
## [2,] -2.644 8.894
## [3,] -6.799 -6.830
cat("pusat asli:\n"); print(pusat_asli)
## pusat asli:
## [,1] [,2]
## [1,] 4.7 2.0
## [2,] -2.6 8.9
## [3,] -6.8 -6.8
# Gambar akhir manual untuk semua h
par(mfrow = c(2, 2))
for (v in hasil_manual) gambar_frame(v, v$nf - 1)
par(mfrow = c(1, 1))
# 7. Animasi GIF (gerakan titik menuju mode)
buat_gif <- function(ob, nama_file) {
save_gif({
for (f in ob$frames) gambar_frame(ob, f)
}, gif_file = nama_file, width = 648, height = 558,
delay = 1 / 7, res = 90, progress = FALSE)
}
for (h in H_LIST) {
ob <- hasil_manual[[as.character(h)]]
path <- file.path(OUT_DIR, paste0("meanshift_h", format(h, nsmall = 1), ".gif"))
buat_gif(ob, path)
hasil_manual[[as.character(h)]]$path <- path
cat(sprintf("GIF selesai h = %s: %d iterasi, %d cluster -> %s\n",
h, ob$iterasi, ob$k, path))
}
## GIF selesai h = 0.3: 140 iterasi, 17 cluster -> hasil_gif/meanshift_h0.3.gif
## GIF selesai h = 0.4: 69 iterasi, 5 cluster -> hasil_gif/meanshift_h0.4.gif
## GIF selesai h = 1.9: 8 iterasi, 3 cluster -> hasil_gif/meanshift_h1.9.gif
## GIF selesai h = 6: 50 iterasi, 1 cluster -> hasil_gif/meanshift_h6.0.gif
# 8. Menampilkan GIF yang BERGERAK
tampilkan_gif <- function(daftar_path) {
tmp <- file.path(tempdir(), "gif_meanshift")
dir.create(tmp, showWarnings = FALSE)
file.copy(daftar_path, tmp, overwrite = TRUE)
img <- sprintf('<div style="width:49%%;display:inline-block"><img src="%s" style="width:100%%"></div>',
basename(daftar_path))
html <- file.path(tmp, "index.html")
writeLines(c("<html><body style='margin:4px;font-family:sans-serif'>", img,
"</body></html>"), html)
viewer <- getOption("viewer")
if (!is.null(viewer)) viewer(html) else browseURL(html)
}
tampilkan_gif(sapply(hasil_manual, function(v) v$path))