Scikit-LearnのRandom Forest Regressorから重み(式)をエクスポートする


9

Scikit Learn in Python(ランダムフォレストリグレッサー)を使用して予測モデルをトレーニングし、手動で予測するためのExcelツールを作成するために、各機能の重みを何らかの方法で抽出したいと考えています。

私が見つけた唯一のものはですがmodel.feature_importances_、それは助けにはなりません。

それを達成する方法はありますか?

def performRandomForest(X_train, y_train, X_test, y_test):

    '''Perform Random Forest Regression'''

    from sklearn.ensemble  import  RandomForestRegressor

    model  =  RandomForestRegressor()
    model.fit( X_train , y_train )

    #make predictions
    expected  = y_test
    predicted  = model.predict( X_test )

    #summarize the fit of the model
    mse  = np.mean(( predicted - expected )** 2)
    accuracy = ( model.score ( X_train , y_train ))

    return model, mse, accuracy

現時点では、を使用しmodel.predict([features])て実行していますが、Excelファイルで必要です。


2
ランダムフォレストリグレッサはのランダムフォレストでdecision treesあるため、線形回帰の場合のように1つの方程式は得られません。代わりに、一連のif, then, elseロジックと多くの最終的な方程式を取得して、最終的な葉を数値に変換します。ツリーを視覚化してすべてのロジックを引き出すことができたとしても、これはすべて大きな混乱のように見えます。Excelで作業している場合は、Azureを使用してExcelでモデルをトレーニングすることを検討してください。しかし、おそらくExcel内からPythonを呼び出すだけです。
AN6U5

各葉の平均を取ることはうまくいきませんか?線形回帰モデルも試してみましたが、違いは限界内にあります。したがって、ランダムフォレストをエクスポートするための合理的かつ効率的な方法がない場合は、線形回帰に戻る必要があるかもしれません。
Tasos、2016年


1
ありがとうございますが、LRでこのように気づきました。回答にコメントを付けて、回答済みとしてマークできますか?
Tasos、2016年

他の誰かが有用な洞察を持っているかどうかを確認するために、数日おき/答えられない価値があるでしょう。データサイエンススタック交換は、スタックオーバーフローよりもはるかに小さいため、優れた洞察に満ちた回答を得るまでに2〜3日かかる場合があります。
AN6U5

回答:




0

最終的なリグレッサーになるために、さまざまなツリーが続くすべてのロジックを抽出したいと思います。そのためには、まず各ツリーのロジックを抽出してから、それらのパスがどのように追跡されるかを抽出する必要があります。Scikit学習は、.decision_path(X)を介してそれを提供し、Xは予測するいくつかのデータセットを提供します。ここから、ランダムフォレストがどのように予測し、各ステップでどのロジックに従うかについてのアイデアが得られます。

decision_pathを抽出したら、Tree Interpreterを使用して、トレーニングしたランダムフォレストの「式」を取得できます。私はこのツリーインタープリターに精通していませんが、トレーニングしたモデラーで直接動作するようです。つまり、

from treeinterpreter import treeinterpreter as ti
# fit a scikit-learn's regressor model

rf = RandomForestRegressor()

rf.fit(trainX, trainY)

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