ランダムフォレストの投票から「確実性スコア」を作成しますか?


36

私は、約10,000個のオブジェクトの適度に大きなトレーニングセットでオブジェクトType AType Bオブジェクトを区別する分類子をトレーニングしようType AとしていますType B。データセットは、セルの物理的特性(サイズ、平均半径など)を詳述する100個の連続したフィーチャで構成されています。ペアワイズ散布図と密度プロットでデータを視覚化すると、多くの特徴で癌細胞と正常細胞の分布にかなりの重複があることがわかります。

現在、このデータセットの分類方法としてランダムフォレストを調査しており、いくつかの良い結果が得られています。Rを使用すると、ランダムフォレストはオブジェクトの約90%を正しく分類できます。

試してみたいことの1つは、オブジェクトの分類に対する自信の程度を定量化する一種の「確実性スコア」を作成することです。私たちは、分類器が100%正確になることはありませんことを知っている、との予測では、高い精度が達成された場合でも、私たちは訓練を受けた技術が真にであるオブジェクトを識別することになるでしょうType AType B。そのため、Type Aまたはの妥協のない予測を提供する代わりにType B、各オブジェクトの方法AまたはBオブジェクトがどのようであるかを説明するスコアを提示したいと思います。たとえば、0〜10の範囲のスコアを考案した場合、スコア0はオブジェクトがオブジェクトに非常に似ていることを示し、スコア10はオブジェクトが非常に似ているType Aことを示しますType B

ランダムフォレスト内の投票を使用して、このようなスコアを考案できると考えていました。ランダムフォレストの分類は、生成されたツリーのフォレスト内の多数決によって行われるため、ツリーの100%によって投票さType Aれたオブジェクトは、たとえばツリーの51%によって投票されたオブジェクトとは異なると想定しますであるType A

現在、オブジェクトをType AまたはType Bに分類するために受け取る必要がある投票の割合に任意のしきい値を設定しようとしましたが、しきい値を超えていない場合はに分類されUncertainます。たとえば、80%以上のツリーが分類の合格に同意する必要があるという条件を強制すると、クラス予測の99%は正しいが、オブジェクトの約40%がとしてビン化されることがわかりますUncertain

それでは、投票情報を利用して予測の確実性をスコアリングすることは理にかなっていますか?または、私は自分の考えで間違った方向に向かっていますか?


トレーニングとテストのデータセットが別々であることを確認してください。テストセットはできるだけ少なく(理想的には1回のみ)使用するようにしてください。
ボリスゴリリック

@bgbg私は、70/20/10の分割で、トレーニング/検証/テストスキームを使用しています。70%のデータでモデルをトレーニングし、20%の検証セットの結果に基づいてパラメーターを調整しています。これら2つのセットのパラメーターを調整した後、10%テストセットでモデルを評価します。ブライマンは、組み込みのOOBエラー率により、別個のテストセットが冗長になると主張していますが、私は彼の主張に警戒しています。
ialm

回答:


19

それは完全に理にかなっており、私が使用したランダムフォレスト(MATLABなど)のすべての実装は、それだけでなく確率的な出力も提供します。

私はRの実装に取り​​組んでいませんが、投票とソフトな決定からソフトな出力を取得する簡単な方法がなければショックを受けます。

編集:Rを一目見ただけで、predict.randomForestも出力確率を行います。


1
お返事ありがとうございます。あなたは正しい、私は各オブジェクトが受け取る票の割合を出力するスクリプトを作成しました。しかし、これらの票はどれほど役に立つのだろうか?推奨する次のステップはありますか?RFをさらに実行することで、投票の割合の変動を調べる必要がありますか?RFには確率的な要素があることを理解しています。診断する必要がある診断はありますか?
ialm

3
@Jonathanあるクラスの実際のオブジェクトの割合を、フォレストからのこのクラスの票の割合の関数として示すプロットを見てみることができます。信頼スコアを必要とする1つの問題に取り組んでいましたが、非常に良いロジスティック曲線を得ることができました。

@mbq申し訳ありませんが、その意味を明確にできますか?私はあなたの提案に興味があり、明日もフォローアップします!
ialm

1
また、RFの変動はトレーニング段階で発生するため、RFでテストサンプルを複数回実行しても結果は変わりません。AUCとRFのツリー数を見て、十分なツリーがあることを確認し、AUCに従って最小リーフパラメーターを最適化します。
ベンハムナー

2
@Jonathan mbqは、calibrationという名前の何かを指していると思います(他の名前もあるかもしれませんが)。例えば、この質問を参照してください:マルチクラスブースト分類器のキャリブレーション「実際の値は、」教師付き分類でを参照してください何を?
ステフェン

17

Rを使用している場合、キャレットパッケージを使用すると、ホイールを再発明する必要がなくなります。たとえば、次のコードは、交差検証を使用してランダムフォレストモデルの調整パラメーターを選択し、各交差検証フォールドの精度の平均と標準偏差を出力します。最後に、モデルのクラス確率を計算します。

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

キャレットの良いところは、異なる予測モデルを非常に簡単に比較できることです。たとえば、SVMを試してみたい場合は、テキストmethod='rf'を次のように置き換えるmethod='svmLinear'か、trainControlパラメーターに行を追加して、精度ではなくAUCにmethod='svmRadial'. 基づいてチューニングパラメーターを選択することもできます。summaryFunction=twoClassSummary

最後に、PerformanceAnalyticsパッケージのコードが少しありますchart.Correlation(Dataset[-5], col= Dataset$Class)。これは、モデルの構築には必要ありませんが、データセットの優れた視覚化を提供します。


あなたは私をキャレットパッケージのファンにしています。異なる分類方法を試して、CVとパラメーターの調整を単独で行い、同等の結果が得られるかどうかを確認するために、2番目のRスレッドを開いたままにすることになると思います。
ialm

@ジョナサンはそれを聞いてうれしい!それは素晴らしいパッケージです。modelLookup()可能なことのリストについては、コマンドを試してください。
ザック

prob種類は、predict使用しても利用可能であるrandomForest(またはのような他のパッケージを使用せずにモデルを訓練しますcaretPerformanceAnalytics)。
ハックR

2

R のrandomForestパッケージは、分析に関するより詳細な情報を得るためのかなりまともなパッケージです。投票(分数またはrawカウントのいずれか)を提供し、調整および相互検証のための組み込みの容量を提供し、機能に関する詳細情報も提供できます(100のうちどれが知りたい場合)分析で最も重要です)。

既にそのパッケージを使用している場合は、詳細を確認し、使用していない場合はチェックアウトすることをお勧めします。

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