Exporter les poids (formule) de Random Forest Regressor dans Scikit-Learn

9

J'ai formé un modèle de prédiction avec Scikit Learn in Python (Random Forest Regressor) et je veux extraire en quelque sorte les poids de chaque fonctionnalité pour créer un outil Excel pour la prédiction manuelle.

La seule chose que j'ai trouvée est la model.feature_importances_mais ça n'aide pas.

Existe-t-il un moyen d'y parvenir?

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

Pour le moment, j'utilise le model.predict([features])pour le faire, mais j'en ai besoin dans un fichier Excel.

Tasos
la source
2
Un régresseur de forêt aléatoire est une forêt aléatoire de decision trees, donc vous n'obtiendrez pas une équation comme vous le faites avec la régression linéaire. Au lieu de cela, vous obtiendrez un tas de if, then, elselogique et de nombreuses équations finales pour transformer les feuilles finales en valeurs numériques. Même si vous pouvez visualiser l'arbre et retirer toute la logique, tout cela semble être un gros gâchis. Si vous travaillez dans Excel, pensez peut-être à simplement former votre modèle à Excel à l'aide d'Azure. Cependant, j'appellerais probablement le python depuis Excel.
AN6U5
Prendre la moyenne de chaque feuille ne fonctionnera pas? J'ai également essayé un modèle de régression linéaire et la différence est à l'intérieur des limites. Donc, s'il n'y a pas de moyen raisonnable et efficace d'exporter la forêt aléatoire, je devrai peut-être revenir à la régression linéaire.
Tasos
1
Merci mais j'étais au courant de cette façon dans LR. Pouvez-vous joindre vos commentaires sur une réponse afin que je puisse la marquer comme ayant été répondue?
Tasos
Cela vaut probablement la peine d'être laissé sans réponse pendant quelques jours pour voir si quelqu'un d'autre a des informations utiles. L'échange de pile de science des données est beaucoup plus petit que le débordement de pile, donc cela prend parfois 2-3 jours pour obtenir de bonnes réponses perspicaces.
AN6U5

Réponses:

1

La bibliothèque SKompiler peut aider:

from skompiler import skompile
skompile(rf.predict_proba).to('excel')

Découvrez cette vidéo .

KT.
la source
0

Au lieu d'exporter les poids, vous pouvez exporter le modèle dans un fichier de pickle et utiliser un xlwings pour lire les données de la feuille de calcul, charger le modèle mariné et exécuter une prédiction Voici des questions similaires .

Olel Daniel
la source
0

Je suppose que vous voulez extraire toute la logique suivie par les différents arbres pour finir sur le régresseur final. Pour cela, vous devez d'abord extraire la logique de chaque arbre, puis extraire comment ces chemins sont suivis. Scikit learn peut fournir cela via .decision_path (X), avec X un ensemble de données à prévoir. De là, vous aurez une idée de la façon dont la forêt aléatoire prédit et quelle logique est suivie à chaque étape.

Une fois que vous avez extrait le decision_path, vous pouvez utiliser Tree Interpreter pour obtenir la "formule" de la forêt aléatoire que vous avez formée. Je ne connais pas cet Tree Interpreter, mais il semble fonctionner directement sur le modeleur que vous avez formé, c'est-à-dire

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)
Diego
la source