ランダムフォレストの予測式を出力するためのアイデア


8

私が尋ねようとしていた質問に答えた次の投稿を読みました:

ランダムフォレストモデルを使用してセンサーデータから予測を行う

出力予測の決定木

これまでに行ったことは次のとおりです。私はロジスティック回帰をランダムフォレストと比較し、RFがロジスティックを上回りました。今、私が一緒に働く医学研究者は私のRF結果を医学診断ツールに変えたいと思っています。例えば:

25〜35歳のアジア人男性で、ビタミンDがxx未満で、血圧がxxを超えている場合、76%の確率で病気xxxを発症します。

ただし、RFは単純な数式に適していません(上記のリンクを参照)。だから私の質問です:RFを使用して診断ツールを開発するためにあなたは皆どんなアイデアを持っていますか(数百本の木をエクスポートする必要はありません)。

ここに私のアイデアのいくつかがあります:

  1. 変数の選択にRFを使用してから、ロジスティックを使用して(考えられるすべての相互作用を使用して)、診断方程式を作成します。
  2. どういうわけか、RFフォレストを1つの「メガツリー」に集約します。これにより、ツリー全体でノード分割が平均化されます。
  3. #2や#1と同様に、RFを使用して変数を選択し(合計でm個の変数など)、何百もの分類ツリーを構築します。これらすべてですべてのm変数を使用し、最適な単一ツリーを選択します。

他のアイデアは?また、#1を行うのは簡単ですが、#2と#3を実装する方法に関するアイデアはありますか?


各ツリーの予測方程式を作成し(単純な分割ポイントになります)、各方程式からの予測を平均化しますか?モンスターの方程式が1つ得られますが、完全に森を表しています。
ザック

@Zachは良い考えです。しかし、残念ながら私は「怪物」を避けようとしています。
dfife 2013年

1
ランダムフォレストが実装の問題を引き起こす理由をもう一度説明していただけませんか。何千もの機能がない限り、それほど集中的ではありません。あなたはそれを切り詰めることができますが、あなたが消化できる分析フォームを持っていることはほとんどありません。
ジェシカコリンズ

@Jacob-問題は、RFに多数の決定木があることです。RFとほぼ同じくらい正確に予測できる単一の数式(できれば数行未満)を報告したいと思います。私は仕事を適度な統計的洗練度の聴衆に公開しているので、ページごとに木のページをエクスポートすると、私の発見が臨床環境に実装される可能性が大幅に制限されると思います。
dfife 2013年

ランダムフォレストモデルのSQLコードを生成する関数を記述しました。gist.github.com
Shane

回答:


6

ここにいくつかの考えがあります:

  1. すべてのブラックボックスモデルは、何らかの方法で検査される場合があります。たとえば、各特徴の変数の重要度を計算したり、各特徴(リンク)の予測応答と実際の応答をプロットしたりすることもできます。
  2. アンサンブルの剪定について考えるかもしれません。フォレスト内のすべての木が必要なわけではなく、数本だけを使用する場合もあります。論文:[Zhangで最小のランダムフォレストを検索]。それ以外の場合は、Googleだけで「アンサンブルプルーニング」を行い、「アンサンブルメソッド:基礎とアルゴリズム」の第6章をご覧ください。
  3. あなたが言ったようにあなたは特徴選択によって単一のモデルを構築することができます。そうでない場合は、ブラックボックス予測を使用して新しいデータセットを構築し、その上に決定木を構築する[複数のモデルを介した例からの知識獲得]でDomingosの方法を使用することもできます。
  4. この Stack Exchangeの回答で述べたように、ツリーモデルは解釈できるように見えるかもしれませんが、トレーニングデータのわずかな摂動のために、大幅に変更される傾向があります。したがって、ブラックボックスモデルを使用することをお勧めします。エンドユーザーの最終的な目的は、新しいレコードが特定のクラスとして分類される理由を理解することです。あなたはその特定の記録のためだけにいくつかの機能の重要性について考えるかもしれません。

私は1または2に行きます。


11

私は、診断設定でRFを使用するのと同じ状況に対処する必要があり、利害関係者は単一の読みやすい方程式に要約されるアルゴリズムに慣れています。簡単な決定木(ここでは方程式を使用できます)の説明から始めて、次に非常に複雑な決定木を説明し、それから過剰適合の欠点を説明すると、いくつかのうなずき始めます。多くの小さな木が異なった方法(「ランダム」)で成長することで不正確さを軽減できること、そして過剰適合を回避しながらもエッジケースを考慮に入れるためにアンサンブル投票または平均として使用できることを説明すると、理解が深まります。以下は、私がよく使用したスライドの例です。

フォレスト内のツリーから逃れることはできません。これらは、アルゴリズムに非常に高い予測能力と堅牢性を与えるものであるため、RFが非常に適切に機能している場合は、より良いソリューションはめったにありません。SVM(データによって異なります)のように、比較するものも同様に複雑になります。良い解決策は(ユーザーにとって)一種のブラックボックスになることを彼らに理解させる必要があります。最善の方法は、単一の方程式よりも多くの労力を必要としない消費可能な実装を作成することです。PythonでRFモデルを構築することに成功しました(sklearn経由)、そのモデルをメモリにロードし、POSTで変数を受け入れて予測を出力する単純なWebサーバーREST APIを作成します。JavaまたはRでこれを非常に簡単に行うことも、APIをスキップして、データを引数として取る実行可能なバイナリ/ jarを作成することもできます。


良い点!-RFの結果を単一の方程式に集約すると、必然的にその利点の一部が失われます。私はそのことを考えていませんでした。
dfife 2013年

2
おそらくそうです。ただし、RFを使用して変数の重要度を計算して次元を減らし、その後、聴衆がより慣れ親しんだ方法を使用することは、一般的な妥協策です。RFの変動する重要度は、通常、RF内のパフォーマンス(リフト、エラーの削減など)に基づいて計算され、他の方法ではすべてが同様の重みを持つわけではないことを知っておくことが重要です。
wwwslinger 2013年

2

SQL Server環境でランダムフォレストを展開した経験がありますUser Defined Function。トリックはIF-THEN ELSE、各ツリーから取得したルールをCASE-WHEN ENDまたはその他のConditional Processing構成に変換することです(確かに、私はJMP Proのブートストラップフォレストの実装-500k行のSQLコードを使用しました)。

rattle Rパッケージを使用してこれを実現できない理由はまったくありません。そのパッケージのrandomForest2RulesprintRandomForests関数を見てください。どちらもrandom forest入力としてオブジェクトを受け取り、フォレスト内の各ツリーを訪問し、一連のIF-THEN ELSEルールを出力します。これを出発点として、上記の関数からの出力は構造化テキストであるため、このロジックを自動化して目的の言語に変換することは難しくありません。

上記では、最小の番号を決定することも重要になります。を維持するために、フォレスト内で必要な精度で予測を行うために必要なツリーの数(ヒント:plot(rf.object)は、ツリーを追加してもフォレストの予測が改善されないポイントを示します。)森を表す線の数。

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