Esporta pesi (formula) da Random Forest Regressor in Scikit-Learn


9

Ho addestrato un modello di previsione con Scikit Learn in Python (Random Forest Regressor) e voglio estrarre in qualche modo i pesi di ogni funzione per creare uno strumento eccellente per la previsione manuale.

L'unica cosa che ho trovato è il model.feature_importances_ma non aiuta.

C'è un modo per raggiungerlo?

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

Al momento, lo uso model.predict([features])per farlo, ma ne ho bisogno in un file Excel.


2
Un regressore foresta casuale è una foresta casuale di decision trees, quindi non otterrai un'equazione come fai con la regressione lineare. Invece otterrai un sacco di if, then, elselogica e molte equazioni finali per trasformare le foglie finali in valori numerici. Anche se puoi visualizzare l'albero ed estrarre tutta la logica, tutto questo sembra un gran casino. Se lavori in Excel, potresti pensare di addestrare il tuo modello in Excel usando Azure. Tuttavia, probabilmente chiamerei semplicemente Python da Excel.
AN6U5,

Prendendo la media di ogni foglia non funzionerà? Ho provato anche un modello di regressione lineare e la differenza è all'interno dei limiti. Quindi, se non esiste un modo ragionevole ed efficiente per esportare la foresta casuale, potrebbe essere necessario tornare alla regressione lineare.
Tasos,


1
Grazie, ma ero a conoscenza di questo in LR. Potete per favore unire i vostri commenti a una risposta in modo che io possa contrassegnarla come risposta?
Tasos,

Probabilmente vale la pena lasciarlo / senza risposta per un paio di giorni per vedere se qualcun altro ha una visione utile. Lo scambio di stack di data science è molto più piccolo dello overflow dello stack, quindi a volte occorrono 2-3 giorni per ottenere buone risposte approfondite.
AN6U5,

Risposte:



0

Invece di esportare i pesi, è possibile esportare il modello in un file pickle e utilizzare un xlwings per leggere i dati dal foglio di calcolo, caricare il modello in decapato ed eseguire una previsione Ecco una domanda simile .


0

Immagino che tu voglia estrarre tutta la logica seguita dai diversi alberi per finire sul regressore finale. Per questo, è necessario prima estrarre la logica di ciascun albero e quindi estrarre il modo in cui vengono seguiti quei percorsi. Scikit learn può fornire questo tramite .decision_path (X), con X alcuni set di dati da prevedere. Da qui avrai un'idea di come la foresta casuale prevede e quale logica viene seguita ad ogni passo.

Dopo aver estratto il decision_path, puoi usare Tree Interpreter per ottenere la "formula" della Foresta casuale che hai allenato. Non ho familiarità con questo Tree Interpreter, ma sembra funzionare direttamente sul modellatore che hai addestrato, ovvero

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.