Як зробити зменшення розмірності в R


28

У мене є матриця, де a (i, j) повідомляє мені, скільки разів я переглядав сторінку j. Є 27K осіб та 95K сторінок. Мені хотілося б, щоб у просторі сторінок було кілька "вимірів" або "аспектів", які відповідали б наборам сторінок, які часто переглядаються разом. Моя кінцева мета - згодом мати можливість обчислити, як часто я переглядав сторінки, які потрапляють у розмір 1, розмір 2 тощо

Я прочитав документацію R щодо аналізу основних компонентів та розкладання одного значення і виконав ці команди, але не знаю, як діяти.

Як я можу використовувати зменшення розмірності для цього? Або це справді проблема кластеризації, і я повинен замість цього вивчити алгоритми кластеризації?

Дякую за будь-яке розуміння ~ l

Відповіді:


10

Припустимо, що mat_pages [] містить сторінки в стовпцях (які потрібно кластеризувати) та осіб у рядках. Ви можете кластерувати сторінки на основі окремих даних у Rby, використовуючи таку команду:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

Матриця навантажень - це матриця власних векторів розкладання даних SVD. Вони дають відносну вагу кожної PAGE у розрахунку балів. Навантаження з більшими абсолютними значеннями має більший вплив при визначенні балів відповідної принципової складової.

Однак я також повинен зазначити короткий час використання PCA для кластерних сторінок. Причиною цього є те, що навантаження дають більші ваги PAGES з більшою мірою зміни, незалежно від того, чи є ця зміна насправді через вміст PAGE чи іншу причину (може бути технічною чи індивідуальною різницею). Навантаження не обов'язково відображають справжні відмінності між групами, що (можливо) є вашим основним інтересом. Але НЕ, це кластеризація справді відображає відмінності в групі за умови, що всі сторінки мають однакову дисперсію (я не знаю, чи це правильне припущення).

Якщо у вас є потужні обчислювальні засоби (що може бути можливим з огляду на ваш розмір даних) - використання ієрархічних моделей може бути хорошою ідеєю. У R це можна зробити за допомогою пакету lme4.


Що робити після того, як отримаєте бали?

Це сильна пропозиція, і аналіз сильно залежить від того, як виглядають дані. Крім того, я б припустив, що цей процес був би дуже нездійсненним для групування ваших даних.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Сподіваємось, це може дати вам уявлення про групування даних.

Попередження: це не те, що я рекомендував би.


Моя рекомендація:

Такі проблеми часто виникають у геноміці. У ваших сторінках справи відповідають гени, а люди відповідають пацієнтам (в основному люди мають те саме значення, що і в геноміці)

Ви хочете кластеризувати сторінки на основі даних.

Ви можете використовувати багато пакетів кластеризації в R, на що вказували інші відповіді. Принципова проблема пакетів, як hclust, полягає в тому, як визначити кількість кластерів. Кілька моїх улюблених:

  • pvclust (дає кластери, а також дає p-значення для кожного кластера. Використовуючи p-значення, ви можете визначити статистично значущі кластери. Проблема : вимагає багато обчислювальної потужності, і я не впевнений, чи буде вона працювати з даними ваших розмір)
  • hopach (дає оціночну кількість кластерів та кластерів)
  • Є інші пакети, доступні в біокондукторі, будь ласка, перегляньте їх у вікні завдання.

Ви також можете використовувати кластеризацію альгів, таких як k-означає і т. Д. Я впевнений, що на цьому форумі я бачив нитку про кластеризацію. Відповіді були дуже детальними. Це запитав Тал Галілі, чи правильно я пам’ятаю.


@suncoolsu: велике спасибі! Я щойно дотримувався ваших порад і побіг prcomp. Я також зберігав створену матрицю навантажень. Але як я можу використовувати цю матрицю для групування сторінок?
laramichaels

Привіт, Laramichaels, будь ласка, знайдіть мою відповідь нижче.
suncoolsu

@suncoolsu: Я маю справу з подібною проблемою, але хочу "скупчити" людей, які мають однакову "динаміку" (насправді у мене величезна кількість часових серій у регіонах, і я хочу їх моделювати). Я думав використовувати пам з кореляційною дистанцією (1-ро). Це рекомендований спосіб? Чи можете ви запропонувати запропонувати кілька шляхів для вивчення?
Teucer

@Musa .. Ти можеш трохи зрозуміліше. Я не думаю, що я розумію згадану вами "динаміку". Безумовно Пее КІ для кластеризації. Але ви також можете спробувати пакети R pvclust і hopach, як я згадував. Крім того, SOM (самоорганізуючі карти) - це інший спосіб погляду на кластеризацію. Будь ласка, дивіться книгу Ріплі та Венебла (2002) - МАСС для більш детальної інформації. Книга пропонує ретельне лікування кластеризації.
suncoolsu

@suncoolsu: Вибачте за погану рецептуру! У мене є 200 часових серій, які я хочу моделювати (тобто моделювати). Я думаю , що я можу кластер «схожий» (тобто мають таку ж поведінку з плином часу: прямий вперед підхід полягає у використанні кореляції) таймсерій і моделювати тільки касетні таймсеріі ...
Тевкр

4

Це, безумовно, проблема кластеризації. Перегляньте clusterпакет Rs, щоб отримати огляд варіантів алгоритму ( pamі agnesце найкращі варіанти для запуску; вони представляють два основні потоки в кластеризації - центроїди та ієрархічний ).
Основна проблема використання кластеризації ваших даних - це визначення хорошої міри подібності між сторінками; простий - використовувати дистанцію на Манхеттені; трохи складніше підрахувати кількість загальних глядачів та нормалізувати його, скажімо, середнім числом глядачів першої та другої сторінки - це повинно заглушити ефекти популярності.

(number of pages)×(number of pages)


Я підтримав вашу відповідь. Однак ви можете надати нові посилання для звіту в останньому реченні. Стара мертва.
дисципліна

1
Я боюся, що його втрачено назавжди ... Взагалі мова йшла про реалізацію методів кластеризації, які не будують явно матрицю подібності кожного до кожного, а досліджують об'єкти на вимогу.

1

Зменшення розмірності в основному застосовує алгоритм кластеризації до атрибутів (стовпців). Через досить велику розмірність вашого набору даних, ви можете спробувати використати SOM (самоорганізовується карта / сітка Kohonen) для створення карти для осіб або сторінок. Потім можна побачити, чи є змістовні (інтерпретовані) зразки.


1

Якщо ви робите PCA, моєю порадою буде короткий екран інших компонентів, ніж лише перші два. Як тільки у вас з'явиться prcompоб'єкт pc(див. Пост suncoolsu), ви зможете plot(pc)побачити кількість дисперсії, приписану різним головним компонентам. Ви також можете легко візуалізувати кілька (зазвичай три або чотири) з них pairs(pc$x[,1:3])або, використовуючи lattice, splom(pc$x[,1:3]).

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