8

R と randomForest パッケージを試しています。SVM とニューラル ネットの経験があります。私の最初のテストは、sin(x)+ガウス ノイズの回帰です。Neural Nets と svm を使用すると、sin(x) の「比較的」適切な近似値が得られるため、ノイズが除去され、学習アルゴリズムが過適合しなくなります。(まともなパラメータの場合) randomForest で同じことを行うと、完全にオーバーフィットしたソリューションになります。私は単に使用します(念のため、R 2.14.0、2.14.1でも試しました):

library("randomForest")
x<-seq(-3.14,3.14,by=0.00628)
noise<-rnorm(1001)
y<-sin(x)+noise/4
mat<-matrix(c(x,y),ncol=2,dimnames=list(NULL,c("X","Y")))
plot(x,predict(randomForest(Y~.,data=mat),mat),col="green")
points(x,y)

randomForest には、正しく機能させるための魔法のオプションがあると思います。いくつか試してみましたが、引くべき正しいレバーが見つかりませんでした...

4

3 に答える 3

3

maxnodesマニュアルの例のように、ツリーのサイズを制限するために使用できます。

r <- randomForest(Y~.,data=mat, maxnodes=10)
plot(x,predict(r,mat),col="green")
points(x,y)
于 2012-02-13T12:50:38.477 に答える
1

Breimanが呼んだように、小さなサンプルまたはバイトで個々のツリーをトレーニングすることにより、はるかに優れた(rmse ~ 0.04、$ R ^ 2 $ > 0.99)ことができます

トレーニング データにはかなりの量のノイズがあるため、この問題は実際には一般化ではなく平滑化に関するものです。一般的な機械学習の用語では、これには正則化を増やす必要があります。アンサンブル学習者にとって、これは強度と多様性を交換することを意味します。

randomForests の多様性は、分割ごとの候補特徴の数 ( mtryR の場合) または各ツリーのトレーニング セット(R の場合) を減らすことで増加させることができますsampsize。入力ディメンションが 1 つしかmtryないため、役に立たず、そのままにしておきsampsizeます。これにより、デフォルト設定より RMSE が 3.5 倍改善され、ノイズの多いトレーニング データ自体よりも 6 倍以上改善されます。多様性の増加は、個々の学習者の予測における分散の増加を意味するため、アンサンブル予測を安定させるためにツリーの数も増やす必要があります。

小さなバッグ、より多くの木:: rmse = 0.04 :

>sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
                         replace=FALSE, ntree=5000),
            mat)
    - sin(x))
[1] 0.03912643

デフォルト設定:: rmse=0.14 :

> sd(predict(randomForest(Y~.,data=mat),mat) - sin(x))
[1] 0.1413018

トレーニング セットのノイズによるエラー:: rmse = 0.25

> sd(y - sin(x))
[1] 0.2548882

ノイズによる誤差はもちろん

noise<-rnorm(1001)
y<-sin(x)+noise/4

上記では、元の質問と同様に、トレーニング セットに対して評価が行われています。問題は一般化ではなく平滑化であるため、これは見た目ほどひどいものではありませんが、out of bag の評価が同様の精度を示していることを確認すると安心できます。

> sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
                          replace=FALSE, ntree=5000))
     - sin(x))
[1] 0.04059679
于 2016-03-29T23:24:18.830 に答える
0

私の直感は次のとおりです。

  • 1次元曲線f(x)に適合する単純な決定木がある場合、それは階段関数に適合することと同等です(等間隔のジャンプである必要はありません)。
  • ランダムフォレストでは、階段関数の線形結合を作成します

階段関数が f(x) の適切な近似値となるためには、x 軸上に十分なステップが必要ですが、各ステップには十分なポイントが含まれている必要があります。これにより、平均値が f(x) の適切な近似になり、ノイズの影響を受けにくくなります。

したがって、nodesize パラメータを調整することをお勧めします。1 つの決定木と N 個の点があり、nodesize=n の場合、階段関数には N/n ステップがあります。n が小さすぎると過学習を引き起こします。n~30 (RMSE~0.07) で良い結果が得られました:

r <- randomForest(Y~.,data=mat, nodesize=30)
plot(x,predict(r,mat),col="green")
points(x,y)

N'=10*N および n'=10*n を取ると、RMSE が小さくなることに注意してください。

于 2017-10-13T11:31:07.617 に答える