Выбор компонентов PCA, которые разделяют группы

13

Я часто использовал для диагностики своих многомерных данных с использованием PCA (опускаются данные с сотнями тысяч переменных и десятками или сотнями выборок). Данные часто приходят из экспериментов с несколькими категориальными независимыми переменными, определяющими некоторые группы, и мне часто приходится проходить через несколько компонентов, прежде чем я смогу найти те, которые показывают разделение между интересующими группами. Я придумала довольно примитивный способ поиска таких различающих компонентов, и мне интересно,

  1. в какой степени это разумно / оправданно, и
  2. есть ли лучшие способы достижения того же.

Обратите внимание, что это ознакомительный. Прежде чем убедить кого-либо еще, я хочу убедить себя. Если я вижу, что есть компоненты, которые четко различают группы, представляющие интерес (например, контроль и лечение), даже если они несут ответственность за незначительную часть дисперсии ответов, я доверяю этому больше, чем результат, скажем, от контролируемой машины учусь.

Вот мой подход. Я буду использовать пример данных metabo из pca3d в R.

Идея состоит в том, чтобы оценить, насколько дисперсия каждого компонента может быть объяснена независимой переменной. Для этого я вычисляю простую модель для каждого компонента и использую R2 в качестве метрики, чтобы упорядочить компоненты от «наиболее интересных» до «наименее интересных».

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

Вот результат. График показывает процент дисперсии каждого компонента, объясняемый независимой переменной в metabo[,1].

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

Мы можем отсортировать компоненты по чтобы узнать, какие из них отображать ; первые три компонента - 2, 1 и 7.r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

Вот сюжет:

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

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

Чтобы переформулировать мои вопросы,

  1. Имеет ли этот подход смысл для вас? Моя проблема в том, что это слишком похоже на выемку данных. Кроме того, интуитивно я думаю, что, возможно, мне следует повернуть таблицу и спросить, какая часть дисперсии в независимой переменной объясняется каждой переменной? Наконец, я (почти) уверен, что плохо изобретаю колесо, поэтому мой второй вопрос
  2. есть что-нибудь получше?

Обратите внимание, что я не хочу переключаться на частичные наименьшие квадраты или что-то подобное на этом этапе; Я просто хочу диагностировать PCA в контексте моей классификации.

январь
источник
2
Я хотел бы сделать всего два комментария по поводу вашего интересного вопроса. 1) Опишите на словах ваш подход помимо показа его кода (помните, что люди здесь используют различное программное обеспечение, не обязательно R). 2) Диаграмма рассеяния не очень убедительна без шипов к полу. Кроме того, если у вас есть какие-то конкретные сомнения относительно вашего подхода, пожалуйста, высказывайте их, чтобы сделать этот вопрос более сфокусированным.
ttnphns
1
отредактировано: чтобы уточнить, вы сначала проводите PCA, а затем пытаетесь выделить основные компоненты, которые лучше всего объяснить какой-то конкретной переменной? Вы перекрестно проверяете их с сюжетом осыпи? Может случиться так, что некоторые x, которые вы выбираете из своего набора данных, объясняют большую разницу в основном компоненте, но я не уверен, что это что-то значит, если дисперсия очень мала по этому основному компоненту.
Shadowtalker
1
@ssdecontrol Ну, я делаю плохое укомплектовывают личным рандомизации , чтобы увидеть ли вычисленная значительно выше фонового шума. Что касается того, означает ли это что-нибудь - дело в том, что это обычно делает, на самом деле. Поскольку я в любом случае выполняю все наборы классического анализа и / или контролируемого машинного обучения, всякий раз, когда я вижу, что PCX в значительной степени объясняется классификатором, я (i) найду несколько переменных, которые различаются между группами этого классификатора и ( II) что я могу успешно обучать SML. R2
января
2
to find out what share of the overall variance in the data matrix is explained by a given classificationЕсли вы хотите знать это, вам не нужен PCA. Просто вычислите отношение суммы квадратов между группами к общей сумме квадратов: (SStotal-SSwithin)/SStotalгде SSwithin - это объединенная сумма квадратов внутри группы.
ttnphns
1
Я не вижу проблем с тем, как вы используете PCA, но я не понимаю, зачем вам это действительно нужно. (Может быть, только потому, что тебе это нравится?) Поскольку я не вижу твоей точной цели, я ничего не могу тебе сказать Is there anything better?.
ttnphns

Ответы:

8

Ответ на ваш вопрос № 1 - да, ваше решение сводится к углублению данных. Ответ на ваш вопрос № 2 - да, в литературе есть лучшие методы.

n<<п

Вы выполняете анализ, который напоминает регрессию главных компонентов, за исключением того, что вы поменяли местами независимые и зависимые переменные, что привело к большому многомерному (в отличие от множественного ) регрессионному анализу. Многофакторная регрессия требует, чтобы размер вашей выборки был больше, чем количество зависимых переменных, - требование, которое вы тщательно нарушаете в своем примере.

Если вы действительно хотите запустить PCA для своих данных, а затем использовать многомерную регрессию, вы должны использовать соответствующий метод. Например, посмотрите на MRCE и связанные с ним методы [1].

Однако, несмотря на несколько удивительных комментариев, которые вы сделали, все, что вы представили в своем анализе в настоящее время, говорит о том, что ваша конечная цель - определить взаимосвязи между большим набором непрерывных переменных (metabo [, - 1]) и одной категориальной переменной (metabo [ , 1]). PCA - плохой способ сделать это. Существует два основных класса решений этой проблемы в многомерном случае: во-первых, решения, которые предполагают разреженность, и решения, которые принимают структуру фактора.

Решения на основе разреженности обычно предполагают, что только очень небольшая часть переменных на самом деле связана с интересующей категориальной переменной, и пытаются найти это небольшое подмножество; например, см. DALASS [2]. Методы, основанные на факторной структуре, предполагают, что ваши дискриминаторные переменные являются проявлениями скрытых скрытых переменных, имеющих истинную связь с категориальной переменной. Примером этого класса методов является DLDA [3].

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

[1] Ротман, Левина, Чжу (2010). Разреженная многомерная регрессия с оценкой ковариации. Журнал вычислительной и графической статистики, том 19, номер 4, страницы 947–962.

[2] Николай Т. Трендафилов, Ян Т. Джоллифф, DALASS: Выбор переменных в дискриминантном анализе с помощью LASSO, Вычислительная статистика и анализ данных, том 51, выпуск 8, 1 мая 2007 года, страницы 3718-3736.

[3] Yu, Yang (2001). Прямой алгоритм LDA для многомерных данных с применением распознавания лиц. Распознавание образов 34, 2067-2070.

ahfoss
источник
2
Я начал новую награду за этот ответ.
января
1
@ Январь: Это хороший ответ, но я хотел бы отметить, что «прямой LDA» в лучшем случае очень странный алгоритм , см. Gao and Davis, 2005. Почему прямой LDA не эквивалентен LDA : «мы демонстрируем это. .. D-LDA может наложить значительные ограничения производительности в общих приложениях ", поэтому будьте осторожны с этим.
говорит амеба, восстанови Монику
@amoeba Спасибо за эту цитату. Некоторое время я беспокоился о DLDA, поскольку нет никаких оснований для выбора компонентов именно таким образом. Я рассматриваю это как очень специфичное решение проблемы, которое не обязательно обобщает за пределы проблем дискриминации по лицу, хотя оно может быть легко адаптировано к любой проблеме с некоторым знанием того, какие компоненты наиболее полезны для дискриминации. Каждое решение, реализующее многомерную дискриминацию с предполагаемой факторной структурой, страдает от проблем ... Вы нашли какие-нибудь лучшие подходы? Мне интересно ваше мнение здесь.
Ахфосс
nk
4

@ahfoss уже указал вам на LDA как классификационный аналог PCA. На самом деле эти два метода связаны друг с другом, а также с PLS:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLS можно рассматривать как регуляризацию, подобную LASSO, а также доступен разреженный PLS (хотя я не использовал его: мои данные больше подходят для обычного PLS, который не предполагает разреженности). Хорошее обсуждение различных методов регуляризации см., Например, « Элементы статистического обучения» .

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

Практическое замечание: если вы работаете в R, у меня есть пакет в разработке, который предоставляет модели PLS-LDA и PCA-LDA. Дайте мне знать, если вы хотите попробовать.


Чтобы избежать углубления данных, вам необходимо проверить окончательную модель (= измерить ее производительность) с помощью независимых данных.

Независимое здесь означает , что в этом случае (пациент?) Не вносят вклад в модели фитинга в любом пути. Особенно,

  • не вводил никакой предварительной обработки, которая включает в себя несколько случаев, таких как центрирование или стандартизация
  • не вошел в расчет PCA / PLS / ...
  • не использовался для оценки гиперпараметра.

Поскольку у вас есть только несколько случаев, уместной будет стратегия повторной выборки. В этой ситуации, вероятно, лучше исправить любые гиперпараметры (например, количество ПК или скрытых переменных PLS, или привязку LASSO) с помощью внешних знаний, чтобы избежать второго, внутреннего разделения ваших обучающих данных для оптимизации гиперпараметра.

cbeleites поддерживает Монику
источник
+1 для перекрестной проверки моделей. Крайне важный. Тем не менее, я хотел бы услышать от OP @January, который заявил, что он не заинтересован в дискриминации, хотя его / ее проблема очень хорошо подходит для анализа дискриминации / классификации.
Ахфосс
Я не согласен с вашим утверждением, что k-means / PCA / etc принадлежат к одной семье. Это подразумевает, что они являются частными случаями одной и той же модели или алгоритма, что не соответствует действительности. Алгоритм PCA представляет собой простое матричное вычисление, тогда как k-means - это итеративный алгоритм, который был сравнен с EM-алгоритмом (технически не корректен, поскольку нет функции правдоподобия, но все же полезное сравнение в некоторых отношениях IMHO).
Ахфосс
1
Вы имеете в виду функцию plsgenomics :: pls.lda? Если нет, то чем ваш пакет отличается / улучшен? Я также укажу заинтересованным читателям, что PLS-LDA в целом превосходит обычно используемый метод простого запуска PLS с фиктивной переменной результата. Хотя этот последний подход не обязательно является неправильным, он определенно является хитрым, не в последнюю очередь потому, что вы можете получить прогнозируемые вероятности меньше нуля или больше единицы!
Ахфосс
@ahfoss: Я не имел в виду алгоритмы, так как одна и та же базовая модель может быть рассчитана разными алгоритмами. Например, для PCA вы можете использовать итеративные (NIPALS, POWER) или неитеративные (EVD, SVD) алгоритмы. Возможно, лучшим термином вместо k-средних был бы «кластерный анализ, сводящий к минимуму сумму квадратов внутри кластера, для которой, например, k-среднее является эвристическим приближением». У меня сейчас нет времени, я посмотрю ответ позже, или мы могли бы встретиться в чате и найти лучшее описание.
cbeleites поддерживает Монику
1
... Техническое отличие заключается в том, что я использую pls::plsrдля PLS (который позволяет выбирать из разных алгоритмов). И у меня есть куча функций пост-обработки, например, для перелистывания и поворота модели, что иногда полезно для интерпретации.
cbeleites поддерживает Монику