Exportieren Sie Gewichte (Formel) aus Random Forest Regressor in Scikit-Learn

9

Ich habe ein Vorhersagemodell mit Scikit Learn in Python (Random Forest Regressor) trainiert und möchte die Gewichte der einzelnen Features irgendwie extrahieren, um ein Excel-Tool für die manuelle Vorhersage zu erstellen.

Das einzige, was ich gefunden habe, ist das, model.feature_importances_aber es hilft nicht.

Gibt es eine Möglichkeit, dies zu erreichen?

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

Im Moment benutze ich das model.predict([features]), um es zu tun, aber ich brauche es in einer Excel-Datei.

Tasos
quelle
2
Ein zufälliger Waldregressor ist ein zufälliger Wald von decision trees, sodass Sie nicht wie bei der linearen Regression eine Gleichung erhalten. Stattdessen erhalten Sie eine Reihe von if, then, elseLogik und viele endgültige Gleichungen, um die endgültigen Blätter in numerische Werte umzuwandeln. Selbst wenn Sie den Baum visualisieren und die gesamte Logik herausziehen können, scheint dies alles ein großes Durcheinander zu sein. Wenn Sie in Excel arbeiten, sollten Sie Ihr Modell möglicherweise nur in Excel mit Azure trainieren. Allerdings würde ich die Python wahrscheinlich nur aus Excel heraus aufrufen.
AN6U5
Den Durchschnitt jedes Blattes zu nehmen, wird nicht funktionieren? Ich habe auch ein lineares Regressionsmodell ausprobiert und der Unterschied liegt innerhalb der Grenzen. Wenn es also keine vernünftige und effiziente Möglichkeit gibt, die zufällige Gesamtstruktur zu exportieren, muss ich möglicherweise zur linearen Regression zurückkehren.
Tasos
1
Vielen Dank, aber ich war mir dieser Art in LR bewusst. Können Sie bitte Ihre Kommentare zu einer Antwort hinzufügen, damit ich sie als beantwortet markieren kann?
Tasos
Es lohnt sich wahrscheinlich, ein paar Tage unbeantwortet zu bleiben, um zu sehen, ob jemand anderes nützliche Erkenntnisse hat. Der Data Science-Stack-Austausch ist viel kleiner als der Stack-Überlauf. Daher dauert es manchmal 2-3 Tage, um gute und aufschlussreiche Antworten zu erhalten.
AN6U5

Antworten:

1

Die SKompiler- Bibliothek könnte helfen:

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

Schauen Sie sich dieses Video an .

KT.
quelle
0

Anstatt die Gewichte zu exportieren, können Sie das Modell in eine Pickle-Datei exportieren und mit xlwings die Daten aus der Tabelle lesen, das eingelegte Modell laden und eine Vorhersage ausführen. Hier sind ähnliche Fragen .

Olel Daniel
quelle
0

Ich denke, Sie möchten die gesamte Logik extrahieren, gefolgt von den verschiedenen Bäumen, um auf dem endgültigen Regressor zu landen. Dazu müssen Sie zuerst die Logik jedes Baums extrahieren und dann extrahieren, wie diese Pfade befolgt werden. Scikit Learn kann dies über .decision_path (X) bereitstellen, wobei X einen Datensatz vorhersagen kann. Von hier aus erhalten Sie eine Vorstellung davon, wie die zufällige Gesamtstruktur vorhersagt und welche Logik bei jedem Schritt befolgt wird.

Sobald Sie den Entscheidungspfad extrahiert haben, können Sie den Bauminterpreter verwenden , um die "Formel" des von Ihnen trainierten Zufallswalds zu erhalten. Ich bin mit diesem Bauminterpreter nicht vertraut, aber er scheint direkt mit dem von Ihnen trainierten Modellierer zu funktionieren, d. H.

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
quelle