2017-02-14 2 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変数には2つのレベルがあります。私は冗談を使いました。

私のコードに間違いがありますか?ゼロ以外の変数が少しあります....

ありがとうございます。

+0

すべてはデータによって異なり、ここでは正しくない可能性があります。データの4つの機能は、ターゲットを正しく分類できます。だからこそ、他のすべての人が重要性を失うのです。 – discipulus

+0

私は@discipulusに同意します。モデルは、結果を予測するためにそれらの変数を選択した。変数の重要度が変更されているかどうかを確認するために、ハイパーパラメータを試して調整することができます。これら4つの変数をデータから外すと、モデルに他の変数を考慮させることができます。ターゲットがバイナリの場合は、 "Bernoulli"または "Binomial"ディストリビューションを試してみてください。 – syebill

答えて

0

コードでは、n.treesは非常に小さく、収縮率は非常に高いです。 この2つの要素を調整するだけです。

  1. n.treesはツリーの数です。 Nを大きくすると、トレーニングセットの誤差が小さくなりますが、それを高く設定すると、オーバーフィットにつながる可能性があります。
  2. interaction.depth(ツリーあたりの最大ノード数)は、ツリー上で実行する必要がある分割の数です(単一ノードから開始)。
  3. 収縮率は学習率とみなされます。収縮は、回帰係数をゼロに減少させ、したがって潜在的に不安定な回帰係数の影響を低減するリッジ回帰において一般に使用される。 私は10,000を超えるレコードを持つすべてのデータセットに0.1を使用することをお勧めします。 また、多くの樹木を育てるときは、小さな収縮を使用してください。

n.trees & 0.1で1000を入力すると、別の値が得られます。 そして、gbmの各変数の相対的な影響を知りたい場合は、varImp()ではなく、summary.gbm()を使用してください。もちろん、varImp()は良い関数です。私はsummary.gbm()をお勧めします。

幸運。

関連する問題