Как сделать уменьшение размерности в R


28

У меня есть матрица, где a (i, j) говорит мне, сколько раз я просмотрел страницу j. Есть 27 тысяч человек и 95 тысяч страниц. Я хотел бы иметь несколько «измерений» или «аспектов» в пространстве страниц, которые соответствуют наборам страниц, которые часто просматриваются вместе. Моя конечная цель состоит в том, чтобы затем вычислить, как часто я просматривал страницы, которые попадают в измерение 1, измерение 2 и т. Д.

Я прочитал документацию R по анализу главных компонентов и разложению по одному значению и выполнил эти команды, но я не уверен, что делать дальше.

Как я могу использовать уменьшение размерности, чтобы сделать это? Или это действительно проблема кластеризации, и я должен вместо этого изучить алгоритмы кластеризации?

Большое спасибо за понимание

Ответы:


10

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

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

Матрица нагрузок - это матрица собственных векторов разложения данных SVD. Они дают относительный вес каждой страницы при подсчете баллов. Нагрузки с большими абсолютными значениями оказывают большее влияние на определение показателя соответствующего основного компонента.

Тем не менее, я также должен указать на то, что использование 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 (Дает вам приблизительное количество кластеров и кластеров)
  • В Bioconductor доступны другие пакеты, пожалуйста, проверьте их в представлении задач.

Вы также можете использовать кластерные алгоритмы, такие как k-means и т. Д. Я уверен, что я видел ветку на этом форуме о кластеризации. Ответы были очень подробными. Тал Галили спросил, правильно ли я помню.


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

Здравствуйте, Laramichaels, пожалуйста, найдите мой ответ ниже.
Suncoolsu

@suncoolsu: Я имею дело с похожей проблемой, но я хочу «кластеризовать» людей, которые имеют одинаковую «динамику» (на самом деле у меня огромное количество временных рядов на регионы, и я хочу смоделировать их). Я думал использовать PAM с расстоянием корреляции (1-ро). Это рекомендуемый способ? Не могли бы вы предложить несколько путей для изучения?
teucer

@Musa .. Можешь быть немного яснее. Я не думаю, что я понимаю "динамику", упомянутую вами. Определенно Пэм в порядке для кластеризации. Но вы также можете попробовать пакеты R pvclust и hopach, как я уже упоминал. Кроме того, SOM (самоорганизующиеся карты) - это другой взгляд на кластеризацию. Пожалуйста, смотрите книгу Рипли и Венейбл (2002) - МАССА для более подробной информации. Книга предлагает тщательное рассмотрение кластеризации.
Suncoolsu

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

4

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

РЕДАКТИРОВАТЬ: Хорошо, теперь я видел размер данных ... это, вероятно, заставит R взорваться, так как ему требуется один треугольник матрицы для хранить расстояния. Проверьте этот отчет для возможных решений.(number of pages)×(number of pages)


Я проголосовал за ваш ответ. Однако не могли бы вы предоставить новые ссылки на отчет в последнем предложении. Старый мертв.
ученик

1
Я боюсь, что он потерян навсегда ... Обычно речь шла о реализациях методов кластеризации, которые не создают явную матрицу сходства между собой, а исследуют объекты по требованию.

1

Уменьшение размерности в основном применяет алгоритм кластеризации к атрибутам (столбцам). Из-за довольно большой размерности вашего набора данных вы можете попытаться использовать SOM (самоорганизующаяся карта / сеть Кохонена) для создания карты для отдельных лиц или страниц. Затем вы можете увидеть, являются ли значимые (интерпретируемые) шаблоны.


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.