Nano Hash - криптовалюты, майнинг, программирование

Как нарисовать график суммы квадратов внутри кластера для кластера?

У меня есть кластерный график по R, в то время как я хочу оптимизировать «критерий локтя» кластеризации с помощью графика wss, но я не знаю, как нарисовать график wss для дающего кластера, кто-нибудь мне поможет?

Вот мои данные:

Friendly<-c(0.467,0.175,0.004,0.025,0.083,0.004,0.042,0.038,0,0.008,0.008,0.05,0.096)
Polite<-c(0.117,0.55,0,0,0.054,0.017,0.017,0.017,0,0.017,0.008,0.104,0.1)
Praising<-c(0.079,0.046,0.563,0.029,0.092,0.025,0.004,0.004,0.129,0,0,0,0.029)
Joking<-c(0.125,0.017,0.054,0.383,0.108,0.054,0.013,0.008,0.092,0.013,0.05,0.017,0.067)
Sincere<-c(0.092,0.088,0.025,0.008,0.383,0.133,0.017,0.004,0,0.063,0,0,0.188)
Serious<-c(0.033,0.021,0.054,0.013,0.2,0.358,0.017,0.004,0.025,0.004,0.142,0.021,0.108)
Hostile<-c(0.029,0.004,0,0,0.013,0.033,0.371,0.363,0.075,0.038,0.025,0.004,0.046)
Rude<-c(0,0.008,0,0.008,0.017,0.075,0.325,0.313,0.004,0.092,0.063,0.008,0.088)
Blaming<-c(0.013,0,0.088,0.038,0.046,0.046,0.029,0.038,0.646,0.029,0.004,0,0.025)
Insincere<-c(0.075,0.063,0,0.013,0.096,0.017,0.021,0,0.008,0.604,0.004,0,0.1)
Commanding<-c(0,0,0,0,0,0.233,0.046,0.029,0.004,0.004,0.538,0,0.146)
Suggesting<-c(0.038,0.15,0,0,0.083,0.058,0,0,0,0.017,0.079,0.133,0.442)
Neutral<-c(0.021,0.075,0.017,0,0.033,0.042,0.017,0,0.033,0.017,0.021,0.008,0.717)

data <- data.frame(Friendly,Polite,Praising,Joking,Sincere,Serious,Hostile,Rude,Blaming,Insincere,Commanding,Suggesting,Neutral)

А вот мой код кластеризации:

cor <- cor (data)
dist<-dist(cor)
hclust<-hclust(dist)
plot(hclust)

И я получу дендрограмму после выполнения приведенного выше кода, а как я могу нарисовать такой график:

введите описание изображения здесь


Ответы:


1

Если я буду следовать тому, что вы хотите, тогда нам понадобится функция для вычисления WSS.

wss <- function(d) {
  sum(scale(d, scale = FALSE)^2)
}

и оболочка для этой wss() функции

wrap <- function(i, hc, x) {
  cl <- cutree(hc, i)
  spl <- split(x, cl)
  wss <- sum(sapply(spl, wss))
  wss
}

Эта оболочка принимает следующие аргументы, входы:

  • i количество кластеров для разрезания данных на
  • hc объект иерархического кластерного анализа
  • x исходные данные

wrap затем разрезает дендрограмму на i кластеров, разбивает исходные данные на членство в кластере, заданное cl, и вычисляет WSS для каждого кластера. Эти значения WSS суммируются, чтобы получить WSS для этой кластеризации.

Мы запускаем все это, используя sapply по количеству кластеров 1, 2, ..., nrow(data)

res <- sapply(seq.int(1, nrow(data)), wrap, h = cl, x = data)

Масштаб можно нарисовать, используя

plot(seq_along(res), res, type = "b", pch = 19)

Вот пример с использованием хорошо известного набора данных Эдгара Андерсона Ириса:

iris2 <- iris[, 1:4]  # drop Species column
cl <- hclust(dist(iris2), method = "ward.D")

## Takes a little while as we evaluate all implied clustering up to 150 groups
res <- sapply(seq.int(1, nrow(iris2)), wrap, h = cl, x = iris2)
plot(seq_along(res), res, type = "b", pch = 19)

Это дает:

введите описание изображения здесь

Мы можем увеличить масштаб, просто показывая первые кластеры 1:50.

plot(seq_along(res[1:50]), res[1:50], type = "o", pch = 19)

который дает

введите описание изображения здесь

Вы можете ускорить основной этап вычислений, запустив sapply() с помощью соответствующей параллельной альтернативы, или просто выполнив вычисления для менее nrow(data) кластеров, например

res <- sapply(seq.int(1, 50), wrap, h = cl, x = iris2) ## 1st 50 groups
21.09.2014
  • Спасибо! Но почему значения по оси Y такие огромные, а мои данные действительно очень маленькие? Кроме того, не могли бы вы, кстати, ответить на мой еще один вопрос о wss-plot ?: stackoverflow.com/questions/25977798/ 22.09.2014
  • Значения на оси Y определяются масштабом переменных в ваших данных. Я посмотрю на другой вопрос. 22.09.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..