Mam zaszumione dane dwóch takich zmiennych.
x1 <- rep(seq(0,1, 0.1), each = 3000)
set.seed(123)
y1 <- rep (c(0.2, 0.8, 0.3, 0.9, 0.65, 0.35,0.7,0.1,0.25, 0.3, 0.95), each = 3000)
set.seed(1234)
e1 = rnorm(length(x1), 0.07,0.07)
set.seed(1223)
e2 = rnorm(length(x1), 0.07,0.07)
set.seed(1334)
yn <- rnorm(20000, 0.5,0.9)
set.seed(2344)
xn <- rnorm(20000, 0.5,0.9)
y <- c(y1 + e1,yn)
x <- c(x1 + e2, xn)
plot(x,y, xlim=c(0,1.2), ylim = c(0,1.2), pch = ".", col = "gray40")
Widzę, że przy bliższym przyjrzeniu jest 10 potencjalnych klastrów.
Jednak całe dane mają wiele punktów:
plot(x,y, pch = ".", col = "gray40")
Chciałbym stworzyć 10 klastrów. Próbowałem analizy skupień metodą K-średnich.
xm1 <- cbind(x,y)
cl1 <- kmeans(xm1, 10)
colrs <- c("red", "green", "blue1", "pink", "green4","tan",
"gray40", "yellow", "black", "purple")
plot(xm1, col = colrs[cl1$cluster], pch = ".", xlim=c(0,1.2), ylim = c(0,1.2))
plot(xm1, col = colrs[cl1$cluster], pch = ".")
Czy w każdym razie (może to być k-średnich jądra, najbliżsi sąsiedzi), które mogą poprawić sprawiedliwość tego typu danych. Jeśli tak, jak mogę to zrobić?
r
machine-learning
clustering
rdorlearn
źródło
źródło
Odpowiedzi:
Ponieważ wydaje się, że twoje dane składają się z mieszanin Gaussa, spróbuj Gaussian Mixture Modeling (alias: EM clustering). Powinno to dać wyniki znacznie przewyższające średnie k dla tego typu danych.
Jeśli Twój „hałas” jest równomiernie rozłożony, możesz również dodać równomierny rozkład do swojego modelu mieszanki.
Jeśli twoje dane są znacznie mniej czyste, rozważ użycie DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - klastrowanie oparte na gęstości wydaje się odpowiednie dla tych danych. DBSCAN jest również bardzo tolerancyjny na hałas („N” oznacza hałas).
źródło
Polecam zajrzeć do tego artykułu. Autorzy proponują solidną metodę, w której wartości odstające są usuwane, a reszta danych jest grupowana. Dlatego nazwali metodę „przycinaniem”. Istniał również pakiet R tclust, ale zgodnie z tym został on usunięty z CRAN. W każdym razie artykuł jest wart przeczytania.
źródło