R: обучение случайного леса с использованием данных PCA - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть набор данных с именем Data, с 30 масштабированными и центрированными объектами и 1 результатом с именем столбца OUTCOME, относящимся к 700k записям, хранящимся в формате data.table.Я вычислил его PCA и заметил, что его первые 8 компонентов составляют 95% дисперсии.Я хочу обучить случайный лес в h2o, вот что я делаю:

Data.pca=prcomp(Data,retx=TRUE) # compute the PCA of Data
Data.rotated=as.data.table(Data.pca$x)[,c(1:8)] # keep only first 8 components
Data.dump=cbind(Data.rotated,subset(Data,select=c(OUTCOME))) # PCA dataset plus outcomes for training

Таким образом, у меня есть набор данных Data.dump, где у меня есть 8 функций, которые вращаются на компонентах PCA,и в каждой записи я связывал его результат.

Первый вопрос: это рационально?или я должен как-то переставлять вектор результатов?или две вещи не связаны?

Затем я разделил Data.dump на два комплекта, Data.train для обучения и Data.test для тестирования, все as.h2o.Я передаю их в случайный лес:

rf=h2o.randomForest(training_frame=Data.train,x=1:8,y=9,stopping_rounds=2,
                    ntrees=200,score_each_iteration=T,seed=1000000)
rf.pred=as.data.table(h2o.predict(rf,Data.test))

В результате получается, что rf.pred не очень похож на первоначальные результаты Data.test$OUTCOME.Я также пытался обучить нейронную сеть и даже не сходился, приводя к сбою R.

Второй вопрос: это потому, что я продолжаю совершать ошибку из-за лечения PCA?или потому что я плохо настроил случайный лес?Или я просто имею дело с раздражающими данными?

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

Заранее большое спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

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

Базовая линия может быть h2o.glm() и / или h2o.randomForest(),но в любом случае без шага СПС.(Вы не сказали, выполняете ли вы регрессию или классификацию, т. Е. Если OUTCOME является числом или фактором, но и glm, и случайный лес будут работать в любом случае.)

Переходите к первомувопрос: да, это разумная вещь, и нет, вам не нужно (на самом деле, не следует) включать вектор результатов.

Другой способ ответить на ваш первый вопрос: нет, этонеразумным.Может случиться так, что случайный лес может видеть все отношения без необходимости использования PCA.Помните, когда вы используете PCA для уменьшения количества входных измерений, вы также выбрасываете немного сигнала.Вы сказали, что 8 компонентов фиксируют только 95% дисперсии.Таким образом, вы выбрасываете некоторый сигнал в обмен на меньшее количество входных данных, что означает, что вы оптимизируете сложность за счет качества прогнозирования.

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

...