从Scikit-Learn中的Random Forest Regressor导出权重(公式)


9

我使用Scikit Learn in Python(Random Forest Regressor)训练了一个预测模型,我想以某种方式提取每个功能的权重,以创建一个用于手动预测的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,因此您不会像线性回归那样得到一个方程式。相反,您将获得大量if, then, else逻辑和许多最终方程式,以将最终叶片转化为数值。即使您可以可视化树并提取所有逻辑,这一切似乎也很混乱。如果您在excel中工作,则可以考虑只使用Azure在excel中训练模型。但是,我可能只是从excel中调用python。
AN6U5

取平均每片叶子不起作用?我还尝试了线性回归模型,差异在极限之内。因此,如果没有合理有效的方法来导出随机森林,则可能需要回到线性回归。
Tasos


1
谢谢,但是我在LR中知道这种方式。能否请您对一个答案发表评论,以便我将其标记为已回答?
Tasos

也许值得一两天不回答,看看别人是否有帮助。数据科学堆栈交换比堆栈溢出小得多,因此有时需要2-3天才能获得良好的见解。
AN6U5'1

Answers:




0

我猜想您要提取所有逻辑,然后提取不同的树,以最终得到最终的回归器。为此,您需要首先提取每棵树的逻辑,然后提取如何遵循这些路径。Scikit learning可以通过.decision_path(X)提供此信息,并使用X进行预测。从这里您将了解随机森林如何预测以及在每个步骤中遵循什么逻辑。

提取了Decision_path之后,您就可以使用树解释器来获取您训练的随机森林的“公式”。我对这个树解释器不熟悉,但是它似乎可以直接在您训练的建模器上工作,例如,

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.