2017-02-14 5 views
1

Я использовал функцию gbm для повышения градиента. И я хочу классифицировать. После этого я использовал функцию varImp() для печати значения переменной в градиентном моделировании. Но ... только 4 переменных имеют ненулевое значение. В моих больших данных есть 371 переменных. Правильно? Это мой код и результат.Как напечатать значение переменной в функции gbm?

>asd<-read.csv("bigdatafile.csv",header=TRUE) 
>asd1<-gbm(TARGET~.,n.trees=50,distribution="adaboost", verbose=TRUE,interaction.depth = 1,data=asd) 

Iter TrainDeviance ValidDeviance StepSize Improve 
1  0.5840    nan  0.0010 0.0011 
2  0.5829    nan  0.0010 0.0011 
3  0.5817    nan  0.0010 0.0011 
4  0.5806    nan  0.0010 0.0011 
5  0.5795    nan  0.0010 0.0011 
6  0.5783    nan  0.0010 0.0011 
7  0.5772    nan  0.0010 0.0011 
8  0.5761    nan  0.0010 0.0011 
9  0.5750    nan  0.0010 0.0011 
10  0.5738    nan  0.0010 0.0011 
20  0.5629    nan  0.0010 0.0011 
40  0.5421    nan  0.0010 0.0010 
50  0.5321    nan  0.0010 0.0010 

>varImp(asd1,numTrees = 50) 
        Overall 
CA0000801   0.00000 
AS0000138   0.00000 
AS0000140   0.00000 
A1     0.00000 
PROFILE_CODE  0.00000 
A2     0.00000 
CB_thinfile2  0.00000 
SP_thinfile2  0.00000 
thinfile1   0.00000 
EW0001901   0.00000 
EW0020901   0.00000 
EH0001801   0.00000 
BS_Seg1_Score  0.00000 
BS_Seg2_Score  0.00000 
LA0000106   0.00000 
EW0001903   0.00000 
EW0002801   0.00000 
EW0002902   0.00000 
EW0002903   0.00000 
EW0002904   0.00000 
EW0002906   0.00000 
LA0300104_SP  56.19052 
ASMGRD2   2486.12715 
MIX_GRD   2211.03780 
P71010401_1   0.00000 
PS0000265   0.00000 
P11021100   0.00000 
PE000.00000 

Имеются 371 переменные. Таким образом, выше результата я не писал других переменных. Все это имеет нулевое значение.

TARGET - целевая переменная. И я произвел 50 деревьев. Переменная TARGET имеет два уровня. поэтому я использовал adaboost.

Есть ли ошибка в моем коде ??? ??? Есть несколько ненулевых переменных ....

Благодарим вас за ответ.

+0

Все зависит от данных и ничего здесь не показывает, что это может быть неверно. Четыре функции в ваших данных могут правильно классифицировать цель. Вот почему все остальные имеют нулевое значение. – discipulus

+0

Я согласен с @discipulus. Модель выбрала эти переменные для прогнозирования результата. Вы можете попробовать и настроить гиперпараметры, чтобы увидеть, меняется ли значение переменной. Вы можете заставить модель рассматривать другие переменные, если вы берете эти 4 переменные из данных. Возможно, попробуйте «Бернулли» или «Биномиальное» распространение, если ваша цель двоичная. – syebill

ответ

0

В вашем коде n.trees очень низкое, а усадка очень высока. Просто настройте этот два фактора.

  1. n.trees - Количество деревьев. N увеличение N уменьшает ошибку на обучающем наборе, но слишком высокая установка может привести к чрезмерной установке.
  2. interactive.depth (максимальное количество узлов на дерево) - это количество разделов, которое он должен выполнять на дереве (начиная с одного узла).
  3. Усадка рассматривается как скорость обучения. усадка обычно используется в регрессии хребта, где она уменьшает коэффициенты регрессии до нуля и, таким образом, уменьшает влияние потенциально неустойчивых коэффициентов регрессии. Я рекомендую использовать 0,1 для всех наборов данных с более чем 10 000 записей. Также! используйте небольшую усадку при выращивании многих деревьев.

Если вы вводите 1000 в n.trees & 0,1 в усадке, вы можете получить другое значение. И если вы хотите знать относительное влияние каждой переменной в gbm, используйте summary.gbm() not varImp(). Конечно, varImp() - хорошая функция. но я рекомендую summary.gbm().

Удачи.