Спс и случайные леса


12

Для недавнего соревнования Kaggle я (вручную) определил 10 дополнительных функций для своего тренировочного набора, которые затем будут использоваться для обучения классификатора случайных лесов. Я решил запустить PCA в наборе данных с новыми функциями, чтобы увидеть, как они сравниваются друг с другом. Я обнаружил, что ~ 98% дисперсии несет первый компонент (первый собственный вектор). Затем я несколько раз обучил классификатор, добавляя одну функцию за раз, и использовал перекрестную проверку и среднеквадратическую ошибку, чтобы сравнить качество классификации. Я обнаружил, что классификации улучшались с каждой дополнительной функцией, и что конечный результат (со всеми 10 новыми функциями) был намного лучше, чем первый запуск с (скажем) 2 функциями.

  • Учитывая, что PCA утверждает, что ~ 98% дисперсии было в первом компоненте моего набора данных, почему качество классификаций так улучшилось?

  • Будет ли это справедливо для других классификаторов? РЧ масштабируется по нескольким ядрам, поэтому тренироваться намного быстрее, чем (скажем) SVM.

  • Что, если я преобразовал набор данных в пространство «PCA» и запустил классификатор в преобразованном пространстве. Как бы изменились мои результаты?


2
Вы нормализовали свои данные перед запуском PCA? Если бы мне пришлось угадывать, я бы подумал, что одна из ваших функций была в гораздо большем масштабе, чем другие ...
Марк Шиверс

1
Функция PCA автоматически все нормализует при выполнении расчетов.
Вишал

1
Может быть, это только я, но не могли бы вы уточнить следующее: ваш первый шаг состоял в добавлении 10 (необработанных) функций, по одной за раз, или вы работали напрямую с компонентами PCA? Как уже говорилось, я понимаю, что это первый случай, и вам интересно, могли бы вы работать непосредственно с результатами PCA. В любом случае, применили ли вы PCA ко всем переменным, включая новые функции, или только к более поздним?
chl

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

Ответы:


7

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

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


«Нет никаких оснований полагать, что объединение как можно большего количества изменений функций в одну новую функцию будет захватывать большую часть прогнозирующей силы функций в целом». Это никогда не имело значения, и выполнение этого привело бы к очень запутанному классификатору! Цель состояла в том, чтобы иметь ряд функций, иллюстрирующих различные аспекты набора данных, с целью уменьшения ошибки обобщения. Смысл взятия PCA заключался в том, насколько отличались функции. И моя точка зрения заключалась в том, что мои функции не были такими уж разными, но результаты РФ все же улучшились.
Вишал

1
Та же логика все еще может применяться. Новая функция является чрезвычайно полезной, так как предшествующая функция может принести больше предсказательной силы. В частности, для randomForest: если в целом важна функция, близкая к дублированию, то в качестве кандидатов на расщепление с большей вероятностью будет выбрана та или иная версия.
Ши Паркс

Напрашивается следующий вопрос: как вы априори выбираете функции для своего классификатора случайных лесов, чтобы улучшить классификацию без фактического запуска классификатора? Есть ли процесс проверки? Как ты делаешь это? :)
Вишал

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

1
Вы могли бы априори вычислить некоторые показатели отделимости для ваших классов на основе ваших особенностей (расстояние Джеффриса-Матуситы, расхождение и т. Д.). Это может помочь вам в целом выяснить, какие функции помогают отличать классы, но из-за особенностей работы с RF не так просто выбрать, какие функции обеспечивают лучший набор для классификации. Здесь одно явное препятствие состоит в том, что RF самостоятельно находит переменные взаимодействия.
JEquihua

6

Первый основной компонент - это линейная комбинация всех ваших функций. Тот факт, что он объясняет почти всю изменчивость, просто означает, что большинство коэффициентов переменных в первом главном компоненте являются значительными.

Теперь сгенерированные вами деревья классификации - это тоже немного другое животное. Они выполняют двоичное разбиение на непрерывные переменные, которые лучше всего разделяют категории, которые вы хотите классифицировать. Это не совсем то же самое, что нахождение ортогональных линейных комбинаций непрерывных переменных, дающих направление наибольшей дисперсии. Фактически, мы недавно обсуждали документ по CV, где PCA использовался для кластерного анализа, и автор (ы) обнаружили, что существуют ситуации, когда наилучшее разделение обнаруживается не в первых нескольких основных компонентах, а в последних.


3
«На самом деле, мы недавно обсуждали документ о CV, где PCA» у вас есть ссылка на это? Я очень заинтересован :)
user603

Я буду искать обсуждение.
Майкл Р. Черник

Будете ли вы так любезны взглянуть на соответствующий вопрос ?
Надя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.