как я могу напечатать значение переменной в функции gbm?

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

>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
PE0000123           0.00000

Имеется 371 переменная. Поэтому над результатом я не писал другие переменные. Все это имеет нулевое значение.

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

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

Спасибо за ваш ответ.


person 이순우    schedule 14.02.2017    source источник
comment
Все зависит от данных, и ничто здесь не указывает на то, что это может быть не так. Четыре функции в ваших данных могут правильно классифицировать цель. Вот почему все остальные имеют нулевое значение.   -  person discipulus    schedule 15.02.2017
comment
Я согласен с @discipulus. Модель выбрала эти переменные для прогнозирования результата. Вы можете попробовать настроить гиперпараметры, чтобы увидеть, изменится ли важность переменной. Вы можете заставить модель учитывать другие переменные, если вы удалите эти 4 переменные из данных. Возможно, попробуйте распределение Бернулли или биномиальное распределение, если ваша цель двоичная.   -  person syebill    schedule 15.02.2017


Ответы (2)


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

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

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

Удачи.

person 서영재    schedule 15.02.2017

Вы не можете использовать importance() NOR varImp(), это только для случайного леса.

Однако вы можете использовать summary.gbm из пакета gbm.

Ex:

summary.gbm(boost_model)

Вывод будет выглядеть так: введите здесь описание изображения

person J. G.B.    schedule 28.11.2020