ランダムフォレストはどのように外れ値に敏感ではないのですか?


33

これを含むいくつかの情報源で、ランダムフォレストは外れ値の影響を受けないことを読みました(たとえば、ロジスティック回帰や他のMLメソッドのように)。

ただし、2つの直観がそれ以外のことを教えてくれます。

  1. 決定木が作成されるたびに、すべてのポイントを分類する必要があります。これは、外れ値でも分類されるため、ブースティング中に選択された決定木に影響を与えることを意味します。

  2. ブートストラップは、RandomForestがサブサンプリングを行う方法の一部です。ブートストラップは外れ値の影響を受けやすくなっています。

異論のある情報源で、外れ値に対する感度に関する私の直感を調整する方法はありますか?


以下の答えはとても良いです。直観的な答えは、決定木は分割に対して機能し、分割は外れ値の影響を受けないということです。分割は、2つのポイントグループ間の任意の場所にあれば分割できます。
ウェイン

ですから、min_samples_leaf_nodeがの場合、1外れ値の影響を受けやすい可能性があります。
ハンレ

はいmin_samplesとブートストラップサンプルを完全RF回帰で1bに外れ値の影響を除去することができます
ソレンHavelundウェリング

一部の統計学者は、それらのインライアのトンネルビジョンを取得し、それを予測して理解することができます。外れ値を「既知の未知数」として大切にし、ビジネスモデルがそれらに対して脆弱かどうか疑問に思います。一部の外れ値は基本的に予測不可能ですが、その影響は非常に現実的です。N。タレブの「ブラックスワン」の言い換え
Soren Havelund Welling

回答:


21

あなたの直感は正しいです。この答えは、単に例で説明しているだけです。

実際、CART / RFは異常値に対して何らかの形で堅牢であるという一般的な誤解です。

単一の外れ値の存在に対するRFの堅牢性の欠如を説明するために、上記のSoren Havelund Wellingの回答で使用されているコードを(わずかに)変更して、単一の 'y'外れ値で適合したRFモデルを完全に振ることができることを示します。たとえば、汚染されていない観測値の平均予測誤差外れ値と残りのデータ間の距離の関数として計算すると、(元の観測値の1つを置き換えることにより)単一の外れ値が導入されていることがわかります(下の画像)「y」スペースの任意の値)で、元の(汚染されていない)データで計算された場合の値からRFモデルの予測を任意に引き離すだけで十分です。

 library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X = data.frame(replicate(2,runif(2000)-.5))
y = -sqrt((X[,1])^4+(X[,2])^4)
X[1,]=c(0,0);
y2<-y
rg<-randomForest(X,y)   #RF model fitted without the outlier
outlier<-rel_prediction_error<-rep(NA,10)

for(i in 1:10){
    y2[1]=100*i+2
    rf=randomForest(X,y2)   #RF model fitted with the outlier
    rel_prediction_error[i]<-mean(abs(rf$predict[-1]-y2[-1]))/mean(abs(rg$predict[-1]-y[-1]))
    outlier[i]<-y2[1]
}
plot(outlier,rel_prediction_error,type='l',ylab="Mean prediction error (on the uncontaminated observations) \\\ relative to the fit on clean data",xlab="Distance of the outlier")

ここに画像の説明を入力してください

どこまで?上記の例では、単一の外れ値が適合度を大きく変更しているため、(汚染されていない)観測の平均予測誤差は、モデルが汚染されていないデータに適合している場合に比べて1桁から2桁大きくなります。

そのため、1つの外れ値がRFフィットに影響を与えないことは事実ではありません。

さらに、他の場所で指摘しているように、外れ値は潜在的にそれらがいくつかある場合に対処するのがはるかに困難です(ただし、それらの影響を表示するためにデータの大部分を占める必要はありません)。もちろん、汚染されたデータには複数の外れ値が含まれる場合があります。RF適合に対するいくつかの外れ値の影響を測定するには、汚染されていないデータのRFから得られた左側のプロットと、応答値の5%を任意にシフトすることによって得られた右側のプロットを比較します(コードは回答以下です) 。

ここに画像の説明を入力してください ここに画像の説明を入力してください

最後に、回帰のコンテキストでは、外れ値が設計空間と応答空間の両方のデータの大部分から際立っている可能性があることを指摘することが重要です(1)。RFの特定のコンテキストでは、設計の外れ値がハイパーパラメーターの推定に影響します。ただし、次元の数が多い場合、この2番目の効果はより顕著になります。

ここで観察しているのは、より一般的な結果の特定のケースです。凸損失関数に基づく多変量データ近似法の異常値に対する極端な感度は、何度も再発見されています。MLメソッドの特定のコンテキストの図については、(2)を参照してください。

編集。

幸いなことに、ベースのCART / RFアルゴリズムは異常値に対して強くは堅牢ではありませんが、手順を変更して「y」異常値に堅牢性を与えることができます。次に、回帰RFに焦点を当てます(より具体的にはOPの質問の対象であるため)。より正確には、任意のノード分割基準を次のように記述します。t

s=arg最大s[pLvartLs+pRvartRs]

ここと子を浮上していることの選択に依存してノード(との陰関数である)及び 左の子ノードに落ちるデータの画分示しとシェアであります内のデータの。次に、元の定義で使用された分散関数を堅牢な代替物に置き換えることにより、回帰ツリー(およびRF)に「y」空間の堅牢性を付与できます。これは本質的に(4)で使用されるアプローチであり、分散は堅牢なスケールのM推定量に置き換えられます。tLtRstLtRspLtLpR=1pLtR

  • (1)多変量の外れ値とレバレッジポイントのマスク解除。Peter J. Rousseeuw and Bert C. van Zomeren Journal of the American Statistics Association Vol。85、No。411(1990年9月)、pp。633-639
  • (2)ランダム分類ノイズは、すべてのコンベックスポテンシャルブースターを無効にします。フィリップM.ロングおよびロッコA.セルベディオ(2008)。http://dl.acm.org/citation.cfm?id=1390233
  • (3)C. Becker and U. Gather(1999)。多変量外れ値識別ルールのマスキングのブレークダウンポイント。
  • (4)Galimberti、G.、Pillati、M。、およびSoffritti、G。(2007)。M推定量に基づく堅牢な回帰ツリー。Statistica、LXVII、173–190。

    library(forestFloor)
    library(randomForest)
    library(rgl)
    set.seed(1)

    X<-data.frame(replicate(2,runif(2000)-.5))
    y<--sqrt((X[,1])^4+(X[,2])^4)
    Col<-fcol(X,1:2) #make colour pallete by x1 and x2
    #insert outlier2 and colour it black
    y2<-y;Col2<-Col
    y2[1:100]<-rnorm(100,200,1);    #outliers
    Col[1:100]="#000000FF" #black

    #plot training set
    plot3d(X[,1],X[,2],y,col=Col)
    rf=randomForest(X,y)    #RF on clean data
    rg=randomForest(X,y2)   #RF on contaminated data
    vec.plot(rg,X,1:2,col=Col,grid.lines=200)
    mean(abs(rf$predict[-c(1:100)]-y[-c(1:100)]))
    mean(abs(rg$predict[-c(1:100)]-y2[-c(1:100)]))

詳細な回答をありがとう。同じ高次元空間に複数の異常値がある場合、「異常値」を呼び出すための基準は何ですか?その場合、異常値に何らかの基準を事前に指定できるように、どのハイパーパラメーターを設定できるのだろうか?
ハンレ

1
以前のコメントを回答に追加しました。あなたの質問に答えるのにもっと良い仕事をしてくれることを願っています!
user603

1
ありがとう。式には何がpありsますか?
ハンレ

1
組み合わされた外れ値(1a + 2)が悪いのはなぜですか?あなたの例では、RFモデルはデータ構造に完全に適合し、99,99%OOB MSEです。2つのクラスター間の中間の土地のモデル構造はかなり粗く、はい、そしてデータよりもモデルの産物です。しかし、この未知の領域では推論や予測が行われるべきではないため、問題ではありません。外れ値に対する絶対的な堅牢性は、まれではあるがおそらく重要な可能性のあるイベントを無視することは避けられません。ほとんどのMLアルゴは、デフォルトで堅牢性と「柔軟性」の中間的な立場をとりますが、堅牢性を高めるために微調整することができます。
ソレンハベルンドウェリング

1
@ user603テクニカルディスカッションに追加するものはありません。それは、ハートオブダークネスが子供の頃の私のお気に入りの本でしたが、フランツカフカのThe Trialはすぐ近くにありました繰り返しますが、それが終了していないのは適切かもしれません)。私はBSの海の中で(良い)外れ値であるハートオブダークネスとザトライアルを読んだり、BSの明暗のイメージを作ったりしなければならなかったことを除いて、外れ値の角度からそれについて本当に考えなかった。上のような分析。
マークL.ストーン

11

外れ値1a:この外れ値には1つ以上の極端な特徴値があり、他のサンプルから離れて配置されます。外れ値は、他のサンプルと同様に木の初期分割に影響を与えるため、強い影響はありません。他のサンプルとの近接性は低く、特徴空間のリモート部分でのみモデル構造を定義します。予測中、ほとんどの新しいサンプルはこの外れ値と類似していない可能性が高く、同じターミナルノードに配置されることはほとんどありません。さらに、ディシジョンツリーは、フィーチャを序数(ランク付け)であると見なします。この値は、ブレークポイントよりも小さい/等しい、または大きいため、フィーチャ値が極端な外れ値であるかどうかは関係ありません。

外れ値1b:分類では、異なるクラスの多くのサンプルの中央に埋め込まれた場合、1つのサンプルが外れ値と見なされる場合があります。デフォルトのRFモデルがこの奇数クラスの1つのサンプルの影響を受ける方法については前に説明しましたが、サンプルに非常に近いだけです。

外れ値2:この外れ値は、おそらく他の値よりも数倍高い極端なターゲット値を持ちますが、特徴値は正常です。ツリーの0.631の端数には、このサンプルの終端ノードがあります。モデル構造は、外れ値の近くでローカルに影響を受けます。ノードは単変量に分割されるため、モデル構造は主に機能軸と平行に影響を受けます。

y=バツ14+バツ2412バツ1バツ2

ここに画像の説明を入力してください

library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X = data.frame(replicate(2,runif(2000)-.5))
y = -sqrt((X[,1])^4+(X[,2])^4)^1
Col = fcol(X,1:2) #make colour pallete by x1 and x2
#insert outlier2 and colour it black
X[1,] = c(0,0);y[1]=2 ;Col[1] = "#000000FF" #black

#plot training set
plot3d(X[,1],X[,2],y,col=Col)

rf = randomForest(X,y)
vec.plot(rf,X,1:2,col=Col,grid.lines = 400)

編集:user603へのコメント

はい、ターゲットスケールの極端な異常値については、RFを実行する前にターゲットスケールを変換することを検討する必要があります。randomForestを調整するrobustModel()関数を以下に追加しました。別の解決策は、トレーニングの前に変換をログに記録することです。

.
##---code by user603
library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X<-data.frame(replicate(2,runif(2000)-.5))
y<--sqrt((X[,1])^4+(X[,2])^4)
Col<-fcol(X,1:2) #make colour pallete by x1 and x2

#insert outlier2 and colour it black
y2<-y;Col2<-Col
y2[1:100]<-rnorm(100,200,1);    #outliers
Col2[1:100]="#000000FF" #black
##---

#function to make models robust
robustModel = function(model,keep.outliers=TRUE) {
  f = function(X,y,lim=c(0.1,.9),keep.outliers="dummy",...) {
  limits = quantile(y,lim)
  if(keep.outliers) {#keep but reduce outliers
  y[limits[1]>y] = limits[1] #lower limit
  y[limits[2]<y] = limits[2] #upper limit
  } else {#completely remove outliers
    thrashThese = mapply("||",limits[1]>y,limits[2]>y)
    y = y[thrashThese]
    X = X[thrashThese,]
  }
  obj = model(x=X,y=y,...)
  class(obj) = c("robustMod",class(obj))
  return(obj)
  }
  formals(f)$keep.outliers = keep.outliers
  return(f)
}

robustRF = robustModel(randomForest) #make RF robust
rh = robustRF(X,y2,sampsize=250)     #train robustRF
vec.plot(rh,X,1:2,col=Col2)          #plot model surface
mean(abs(rh$predict[-c(1:100)]-y2[-c(1:100)]))

ここに画像の説明を入力してください


「他の予測は影響を受けません」と書きます。単一の外れ値をシフトして配置y[1]=200すると、汚染されていない観測値の予測誤差が片手で20倍にジャンプすることがわかります。
user603

@ user603確かに、そのような場合、RFに渡される前にターゲットスケールを単調に変換できます。私は答えに「robustModel:モデルを堅牢にする」を追加しました.....もちろん、そのようなランダムなターゲット外れ値(タイプ2)を予測することは不可能なままですが、残りのモデル構造は苦しむ必要はありません
Soren Havelund Welling

Log変換は、一般に、外れ値に対する解決策ではありません(単に問題を隠しているだけです)。提案するRFの堅牢化は、基本的に、Galimberti、G.、Pillati、M.、およびSoffritti、G.で提唱されているアプローチです(私の回答を参照)。主な違いは、 '' robustModel ''アプローチでは、応答空間の最大ブレークポイントが25%(25%または任意の 'y'-外れ値に耐えることができる)であるのに対し、それらは50%のbdpであるということです。設計空間の外れ値に対して堅牢です
user603

8

外れ値に対してロバストなのはランダムフォレストアルゴリズム自体ではなく、それがベースとする基本学習器:決定木です。決定木は、非定型の観測値を小さな葉(つまり、元の空間の小さな部分空間)に分離します。さらに、決定木はローカルモデルです。同じ方程式が空間全体に当てはまる線形回帰とは異なり、非常に単純なモデルが各部分空間(つまり各葉)に局所的に適合します。

  • 回帰の場合、それは一般に非常に低次の回帰モデルです(通常、葉の観測値の平均のみ)。
  • 分類については、多数決です。

したがって、たとえば回帰の場合、極値は局所的に平均化されるため、モデル全体に​​は影響しません。したがって、他の値への適合は影響を受けません。

実際、この望ましい特性は、樹形図などの他の木のような構造に引き継がれます。たとえば、階層的なクラスタリングは、異常な観測を小さなクラスターに自動的に分離するため、データクリーニングに長い間使用されてきました。例えば、Loureiroらを参照してください(2004)。クラスタリング手法を使用した異常値検出:データクリーニングアプリケーション

したがって、簡単に言えば、RFは再帰的分割ローカルモデルフィッティングから外れ値への非感受性を継承します。

決定木は低バイアスだが高分散モデルであることに注意してください。それらの構造は、トレーニングセットの小さな変更(いくつかの観測の削除または追加)で変更される傾向があります。しかし、これは外れ値に対する感度と間違われるべきではありません。これは別の問題です。


あなたが提案するように、異常値の検出にクラスタリング手法を使用することを実際に検討しました。しかし、その後、クラスタリングをどこに適用するかわからない。それに適用されるべきlabeledか、unlabeledデータ?そして、このクラスタリングは、カテゴリーと数値の両方の特徴を含む異種データでどのように達成されますか?
ハンレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.