2つの異なるランダムフォレストモデルのR-2乗を比較する


10

RのrandomForestパッケージを使用してランダムフォレストモデルを開発し、サンプルよりも多くの予測子を持つ「広い」データセットで継続的な結果を説明しようとしています。

具体的には、1つのRFモデルをフィッティングして、重要と思われる75個までの予測変数のセットから手順を選択できるようにしています。

以前ここに投稿したアプローチを使用して、予約済みテストセットの実際の結果をモデルがどの程度予測できるかをテストしています。

...またはR:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

しかし、これで追加できる〜25の予測変数が追加されました。〜100の予測子のセットを使用すると、R²が高くなります。これを統計的にテストしたいのですが、言い換えると、〜100の予測子のセットを使用した場合、モデルのテストは、〜75の予測子を使用したモデルの近似よりもデータのテストで大幅に優れています。つまり、RFモデルのテストから得られたR²は、完全なデータセットに適合し、削減されたデータセットでのRFモデルのテストから得られたR²よりも大幅に高くなります。

これはパイロットデータであり、追加の25の予測子を取得するのは高価であり、大規模な追跡調査でこれらの予測子を測定するために支払う必要があるかどうかを知る必要があるため、これは私にとってテストにとって重要です。

なんらかのリサンプリング/順列アプローチを考えているのですが、何も思い浮かびません。

回答:


8

相互検証!キャレットでtrain関数を使用して、2つのモデルに適合させます。mtryの値を1つ使用します(両方のモデルで同じ)。キャレットは、再サンプリングされたRMSEおよび推定値を返します。R2

キャレットビネットの 3ページを参照(完全なリファレンスマニュアルで参照


OPはR-squared調整を使用するというあなたの省略を除いて、私は同意します。モデルのYは同じですが、予測子セットが異なります。そのため、費やされた自由度/モデルの複雑さの違いにペナルティを課すには、R二乗調整が必要です。私が目にするもう1つの問題は、サンプルサイズの問題です。OPは、CVを使用しても、これが過剰適合ではないことを実際に期待するために、MASSIVEサンプルサイズを必要とします。
LSC

@LSC私は、追加のデータセット(選択には使用されない)を保持する場合、正規化されたRMSEとして、調整なしでR2を使用できると言います。これを行うには、かなり大きなデータセットが必要になることに同意します。
ザック

新しいデータまたは古い、他はすべて一定、モデルに100項を25に対して配置すると、25予測子モデルからのR二乗と比較して、未調整のR二乗が高くなります。これは、2つの間の二乗誤差の合計を計算するときに簡単にわかります(より多くの項はより低いSSEであり、他はすべて同じです)。多くの場合、より多くの用語がR-squaredを減少させることは決してないことを忘れていると思いますが、それらの値に対して悪臭がある場合、調整されたR-Squaredを減少させることができます。
LSC

"より多くの項はR-squaredを減少させることは決してありません" <-このステートメントは、サンプルからR2を計算する場合は誤りです。
ザック

先に述べたように、これらの質問をする多くの人々はそもそもこの考えを覚えていないので、私はそれを指摘しています。これがサンプルに当てはまり、新しいデータを保持できない理由を理解することは、元の方程式で何がどのように最適化されるかを理解するために重要だと思います。
LSC

4

両方のモデルを交差検証し、比較するのが最良のアイデアであるとザックに同意します。たとえば、各フォールドから値を収集し、結果のベクトルをWilcoxonテスト(kフォールドでペア、ランダムでペアではない)と比較します。履歴書)。R2

副次的なオプションは、関連するすべての機能選択を使用することです。これにより、どの属性が分類に非常に役立つ可能性があるかがわかります。したがって、これらの高価な属性は価格に見合う価値があります。たとえば、RFラッパーBorutaを使用して行うことができます。


対応のあるテストの場合、2つのモデルが同じ折りたたみに適合していると思いますか?それで、matrxのk行が折りたたみで、2つの列がモデル1とモデル2になるようにしますか?
B_Miner

@B_Miner正確に。

1

統計的有意性(またはその両方)ではなく、実用的な有意性の観点から考えることをお勧めします。十分なデータがあれば、統計的に統計的に有意なものを見つけることができ、それは使用量に実際の影響を与えません。5方向の相互作用が統計的に有意であったモデルを一度分析したことを覚えていますが、5方向の相互作用までのすべてを含むモデルからの予測が、2方向の相互作用と主効果のみを含むモデルからの予測と比較されたとき、最大の違いは1人未満でした(応答は人数で、すべての興味深い値は0から離れていました)。したがって、追加された複雑さはそれだけの価値はありませんでした。したがって、予測の違いを見て、その違いが追加コストを正当化するのに十分かどうかを確認します。そうでない場合、なぜ統計的有意性を探す必要があるのですか?違いが実際の場合のコストを正当化するのに十分な大きさである場合は、相互検証を使用する他の提案を次に示します。


1

1つのオプションは、平均二乗誤差の信頼区間を作成することです。分母は両方のモデルで同じであるため、代わりに平均二乗誤差を使用します。Dudoitとvan der Laanによる論文(記事ワーキングペーパー)は、リスク推定量の信頼区間を構築するための一般的な定理を提供します。アイリスデータの例を使用して、メソッドを使用して95%信頼区間を作成するいくつかのRコードを次に示します。R2

library(randomForest)
data(iris)
set.seed(42)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

このメソッドは、クロスバリデーション内で機能するように拡張することもできます(上記のサンプル分割だけではありません)。


0

randomForest交差検証後に既に使用しているので、予測変数の重要度値の選択された近似の計算を出力する可能性があります。

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720

0

この質問はずっと前に尋ねられたようです。しかし、質問の重大な欠点と誤解を指摘する回答はまだありません。

ご注意ください:

  1. あなたは、R ^ 2 = ESS / TSS = 1-RSS / TSSと述べています。これは、線形のコンテキストでのみ当てはまります。TSS = RSS + ESSの等式は、切片による線形回帰でのみ当てはまります。したがって、これらの定義をランダムフォレストに交換して使用することはできません。これが、RMSEと同様のものがより一般的な損失関数である理由です。

  2. さらに重要なのは、統計上の目的です。R^ 2は、(線形設定でも)未知の分布に従います。つまり、R ^ 2を使用して統計的有意性を持つ仮説をテストすることは簡単ではありません。Zachによって言及されているように、相互検証は良い選択です。

user88の応答については、ウィルコクソン検定による相互検証が有効なアプローチです。最近の論文では、さまざまな方法やアルゴリズムの比較に、ウィルコクソンの符号付き順位検定とフリードマン検定を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.