Виконайте K-засоби (або його близькі споріднення), кластеризуючи лише матрицю відстані, а не дані по характеристиках


22

Я хочу виконати кластеризацію K-засобів на об'єктах, які у мене є, але об'єкти не описуються як точки в просторі, тобто за objects x featuresнабором даних. Однак я в змозі обчислити відстань між будь-якими двома об’єктами (воно засноване на функції подібності). Отже, я розпоряджаюсь матрицею відстані objects x objects.

Я раніше реалізував K-засоби, але це було з введенням набору даних точок; і з введенням матриці відстані мені незрозуміло, як оновити кластери, щоб вони були "центрами" кластера без точкового подання. Як це нормально зробити? Чи є для цього версії K-засобів або близьких до них методів?


Що ви означаєте, що вони не описуються як бали?
цікаво

Дивіться також stats.stackexchange.com/q/12495/3277
ttnphns

Відповіді:


24

Очевидно, що k-засоби повинні вміти обчислювати засоби .

Однак є добре відома його версія, відома як k-медоїди або PAM (Partitioning Around Medoids), де медоїд є існуючим об'єктом, який є найважливішим для кластера. К-медоїдам потрібні лише парні відстані.


21

Ви точно описуєте задачу проблеми kernel -means; коли ви не можете представити точку даних як евклідового вектора, але якщо ви все-таки можете обчислити (або визначити) внутрішній добуток між двома точками даних, ви можете кернелізувати алгоритм. Наступна веб-сторінка містить короткий опис алгоритму:к

Ядро -значить сторінкук

Цей трюк з ядром є дуже популярною та фундаментальною ідеєю у статистиці та машинному навчанні.

Сторінка Вікі про хитрість ядра

Якщо вас цікавить, книга « Навчання з ядрами» Бернарда Шелкопфа та Олександра Дж. Смола стане дуже приємним вступом.

Ця замітка Макса Веллінга здається дуже приємною; Крім того , якщо ви використовуєте R ви подивіться на може цього R пакет .

MDS може бути одним із способів вирішити вашу проблему, але він безпосередньо не атакує проблему, яку ви хочете вирішити; тоді як ядро ​​k-означає.


Я хотів включити більше посилань, але не зміг через низьку репутацію. Це примітка від Max Welling ноти здається дуже добре; також, якщо ви використовуєте R, ви можете подивитися цей пакет R
d_ijk_stra

(+1) Ласкаво просимо на сайт. Я додав посилання у вашому коментарі до основної публікації, а також до тексту Шелкопфа та Смоли.
кардинал

9

@gung абсолютно коректний, пропонує вам багатовимірне масштабування (MDS) як попередній інструмент для створення points X dimensions даних з матриці відстаней. Я повинен додати лише кілька штрихів. Кластеризація К означає, що передбачає евклідові відстані . MDS дасть вам координати точок у розмірах, тим самим гарантуючи евклідові відстані. Ви повинні використовувати метричний MDS і запитувати якомога більше розмірів, тому що ваша мета полягає в тому, щоб мінімізувати помилки відновлення даних, а не відображати їх у 2D або 3D.

Що робити, якщо у вас немає програмного забезпечення MDS під рукою, але у вас є деякі функції матриці, такі як розкладання власного значення або розкладання сингулярного значення? Тоді ви могли б зробити просту метричну MDS самостійно - Torgerson MDS, також відому як аналіз основних координат (PCoA). Це становить трохи "скручений" аналіз основних компонентів. Я не буду це описувати тут, хоча це досить просто. Ви можете прочитати про це у багатьох місцях, наприклад, тут .

Нарешті, можна запрограмувати "K-засоби для введення матриці відстані" безпосередньо - без виклику чи запису функцій, виконуючи PCoA або інший метричний MDS. Ми знаємо, що (a) сума квадратичних відхилень від центроїда дорівнює сумі попарно квадратних евклідових відстаней, поділених на кількість точок; та (b) знати, як обчислити відстані між центроїдами кластера поза матрицею відстані ; (c) і далі ми знаємо, як суми квадратів взаємопов'язані в K-значенні. Все це разом робить написання алгоритму, який ви хочете, просто, а не складне завдання. Слід пам’ятати, що K-засоби призначені лише для евклідових відстаней / евклідового простору. Використовуйте К-медоїди або інші методи для неевклідових дистанцій.

Подібне запитання .


7

Я, звичайно, не знаю, як це "нормально" робиться, і для запису я не знаю багато про кластерний аналіз. Однак ви знайомі з багатовимірним масштабуванням ? ( Ось ще одна довідка, вікі , і ви можете шукати резюме під тегом .) Багатовимірне масштабування бере матрицю парних відстаней, що схоже на вашу ситуацію. З MDS можна отримати розташування об'єктів у просторі з найменшими розмірами, необхідним для їх адекватного представлення. Я б припустив, що ви можете використовувати ці локації для подальшого аналізу кластерів, наприклад k-означає; або, як тільки ви отримали вихід, вам більше не знадобиться CA.

Я не знаю, чи ви використовуєте R, але ось перегляд завдань для Psychometrics, який включає в себе розділ про MDS в Р. Надія, який допомагає.


4

к

У вашому випадку вам потрібно зробити:

  1. D з нульовою самовідмінністю.
  2. DijDji .
  3. Dc
  4. Sc=-12Dc
  5. ScScS~c
  6. S~c=VΛV .
  7. н-1Х=VΛ1/2

н


Описані кроки - це не що інше, як аналіз основних координат, який я згадую у своїй відповіді.
ttnphns

Будь ласка, поясніть свій крок 5. Субстратація останнього (негативного) власного значення з елементів матриці S, здається, не допоможе зробити S позитивний напівмежній.
ttnphns

@ttnphns: В основному це PCA, так, але це не вимагає, щоб відстані були метричними. Опис кроку 5 було невдалим, дякую за те, що його помітили. Це зараз зрозуміло?
блякання

Віднімання суми від’ємних власних значень з усіх власних значень, а потім відновлення S матриці еквівалентно відніманню цієї суми з діагональних елементів S. Цей ендед робить S позитивним (напів) визначеним, але ...
ttnphns

... але цей спосіб дуже поганий в тому сенсі, що отримані евклідові дані X виробляють евклідові відстані D_new, які дуже далекі від оригінальних відмінностей D. Отже, я не рекомендував би ваш крок 5. Мабуть, набагато краще просто встановити негатив власних значень до 0 і перейти до кроку 7. Або, трохи більш тонкий підхід: встановіть негативні власні значення 0, перерахуйте масштаби позитивних власних значень так, щоб вони були початковими (= слід (S)), а потім перейдіть до кроку 7. Ось як це виглядає для мене.
ttnphns

2

Ваші дані також можна розглядати як мережу, і ви можете використовувати один із багатьох доступних алгоритмів кластеризації мережі. Для цього вам, ймовірно, потрібно буде застосувати поріг на вазі ребер та перетворити відстані на подібність. Це не спосіб «статистики», але аналіз кластерів - це наперед не визначена проблема, і алгоритми кластеризації дослідницьких інструментів дуже добре працюють.


2

Я не знаю, чому це так нечасто в літературі, проте рішення, запропоноване @gung та @ttnphns (спочатку запроектуйте свої парні відстані в евклідовий простір, використовуючи аналіз основних координат, наприклад, через цей пакет, якщо ви використовуєте R, а потім виконувати K-означає звичайний спосіб) простий і не вимагає спеціалізованих алгоритмів. Я особисто використовував його тут, вбудований в рамки оптимізації, і він працював досить добре.


1

Що стосується кластеризації та MDS, я б запропонував такі ресурси:

Ці посилання також добре висвітлюють теми подібності та функції відстані (заходи близькості) для бінарних та безперервних даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.