PCA и разделение поезда / теста

35

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

Можно ли сделать PCA один раз для всего набора данных, а затем использовать новый набор данных с более низкой размерностью для перекрестной проверки, как описано выше? Или мне нужно сделать отдельный PCA для каждого учебного набора (что будет означать создание отдельного PCA для каждого классификатора и для каждой перекрестной проверки)?

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

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

побитовое
источник
Для дальнейшего использования. См. Этот вопрос о том, как сделать перекрестную проверку с помощью PCA в R с caretпакетом: PCA и перекрестную валидацию в k-кратном порядке в Caret .
говорит амеба: восстанови Монику
См. Также Действительно ли нормально выполнять выбор функций без контроля перед перекрестной проверкой? , в частности, ответ @cbeleites.
говорит амеба, восстанови Монику

Ответы:

34

Чтобы измерить ошибку обобщения, вам нужно сделать последнее: отдельный PCA для каждого учебного набора (что будет означать создание отдельного PCA для каждого классификатора и для каждого CV).

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


  • Вам нужно будет определить автоматический критерий количества используемых компьютеров.
    Поскольку это всего лишь первый шаг сокращения данных перед «фактической» классификацией, использование слишком большого количества ПК, скорее всего, не повлияет на производительность. Если вы ожидаете, сколько ПК будут полезны из опыта, вы можете просто использовать это.

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

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

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


Мне все еще трудно понять, как первоначальный PCA во всем наборе данных будет смещать результаты, не видя меток классов.

Но он видит данные. И если разница между классами велика по сравнению с дисперсией внутри класса, разница между классами будет влиять на проекцию PCA. Обычно шаг PCA делается, потому что вам нужно стабилизировать классификацию. То есть, в ситуации , когда дополнительные случаи делают влияние на модели.

Если разница между классами невелика, это смещение не будет большим, но в этом случае PCA также не поможет в классификации: прогноз PCA не может помочь подчеркнуть разделение между классами.

cbeleites поддерживает Монику
источник
Спасибо, это именно то, что я подумала, так что приятно слышать это из независимого источника. Мне все еще трудно понять, как первоначальный PCA во всем наборе данных будет смещать результаты, не видя меток классов.
Побит
@Bitwise: пожалуйста, смотрите мою правку
cbeleites поддерживает Monica
Привет @cbeleites, я хочу сделать эту ветку "канонической" веткой для вопросов о PCA и разделении поездов / тестов (их много!) И пометить их как дубликаты. Я позволил себе добавить одно предложение к вашему ответу, которое могло бы прояснить недоразумение, которое часто возникает в дублирующих вопросах. Надеюсь, вы довольны моим редактированием, но, пожалуйста, проверьте! +1, кстати.
говорит амеба: восстанови Монику
@amoeba, большое спасибо. Да, это важный момент, который вы добавили. Любое большое спасибо за работу, которую вы вложили в очистку сборника вопросов.
cbeleites поддерживает Монику
1
@FelipeAlmeida: да
cbeleites поддерживает Монику
2

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

Если, с другой стороны, у вас есть набор данных, в котором вы должны построить модель сейчас, и в какой-то момент в будущем вы получите новые выборки, которые вы должны предсказать с помощью этой предварительно построенной модели, вы должны будете делать отдельный PCA в каждом сгибе чтобы быть уверенным, что это будет обобщать. Поскольку в этом случае мы не будем знать, как могут выглядеть новые функции, и мы не сможем перестроить модель, чтобы учесть новые функции, выполнение PCA на данных тестирования будет «пиковым». В этом случае как функции, так и результаты для неизвестных образцов недоступны, когда модель будет использоваться на практике, поэтому они не должны быть доступны при обучении модели.

зазывала
источник
0

У последнего, спс на тренировках ставить каждый раз

В PCA мы изучаем сокращенную матрицу: U, которая помогает нам получить прогнозZ_train = U x X_train

Во время теста мы используем тот же самый U, полученный на этапе обучения, а затем вычисляем прогнозZ_test = U x X_test

Итак, по сути, мы проецируем тестовый набор на уменьшенное пространство признаков, полученное во время обучения.

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

Вамши Г
источник