Я только что посмотрел лекцию из курса машинного обучения на Coursera. В разделе, где профессор обсуждает PCA для предварительной обработки данных в контролируемых учебных приложениях, он говорит, что PCA следует выполнять только на обучающих данных, а затем отображение используется для преобразования перекрестной проверки и тестовых наборов. См. Также PCA и разделение поезда / теста .
Однако в caret
пакете R данные обучения, которые вы передаете в train()
функцию, уже обработаны PCA. Поэтому , когда алгоритм выполняет K-кратное кросс проверки, набор кросс проверки уже были обработаны с помощью РСА preProcess()
и predict()
и фактически используется в PCA «фитинг».
Правильно ли я понимаю ситуацию? Т.е. процедура карета для перекрестной проверки с PCA (или фактически с любым методом масштабирования / центрирования) является "неправильной", потому что предварительная обработка данных выполняется на наборе перекрестной проверки, а также на обучающем наборе? И если да, то как это повлияет на результаты?
источник
Ответы:
Я не видел лекцию, поэтому не могу комментировать сказанное.
Мои 0,02 доллара: если вы хотите получить хорошие оценки производительности с помощью повторной выборки, вам действительно следует выполнять все операции во время повторной выборки вместо предыдущей. Это действительно верно для выбора функций [1], а также для нетривиальных операций, таких как PCA. Если это добавляет неопределенности к результатам, включите его в повторную выборку.
Подумайте о регрессии основного компонента: PCA, за которым следует линейная регрессия некоторых компонентов. PCA оценивает параметры (с шумом) и количество компонентов также должны быть выбраны (разные значения приведут к разным результатам => больше шума).
Скажем, мы использовали 10-кратное резюме со схемой 1:
или схема 2:
Должно быть понятно, что второй подход должен давать оценки ошибок, которые отражают неопределенность, вызванную PCA, выбором количества компонентов и линейной регрессией. По сути, резюме в первой схеме не имеет представления о том, что ему предшествовало.
Я виновен в том, что не всегда выполняю все операции с повторной выборкой, но только тогда, когда меня не интересуют оценки производительности (что необычно).
Есть ли большая разница между этими двумя схемами? Это зависит от данных и предварительной обработки. Если вы только центрируете и масштабируете, вероятно, нет. Если у вас есть тонна данных, вероятно, нет. По мере уменьшения размера обучающего набора риск получения неверных оценок возрастает, особенно если n близко к p.
По опыту могу с уверенностью сказать, что не включать выбор контролируемых функций в повторную выборку - это действительно плохая идея (без больших тренировочных наборов). Я не понимаю, почему предварительная обработка была бы защищена от этого (до некоторой степени).
@mchangun: Я думаю, что количество компонентов является параметром настройки, и вы, вероятно, захотите выбрать его, используя оценки производительности, которые можно обобщить. Вы можете автоматически выбрать K так, чтобы было объяснено как минимум X% дисперсии, и включить этот процесс в повторную выборку, чтобы мы учитывали шум в этом процессе.
Максимум
[1] Ambroise, C. & McLachlan, G. (2002). Смещение отбора при экстракции генов на основе данных по экспрессии генов микрочипов. Труды Национальной академии наук, 99 (10), 6562–6566.
источник
Не обрабатывайте данные перед запуском
train
функции! ИспользуйтеpreProcess
аргумент для функции train, и предварительная обработка будет применяться к каждой итерации повторной выборки.например , не делайте этого:
сделай это!
источник
pred <- predict(knnFit2, newdata)
гдеnewdata
не масштабируется. Достаточно ли умен Карет, чтобы знать, что ему нужно предварительно обработать его,newdata
прежде чем использовать его для прогнозов?