Eksportuj wagi (formuła) z Random Forest Regressor w Scikit-Learn

9

Przeszkoliłem model predykcyjny w Scikit Learn w Pythonie (Random Forest Regressor) i chcę w jakiś sposób wyodrębnić wagi każdej funkcji, aby stworzyć narzędzie Excel do ręcznego przewidywania.

Jedyne, co znalazłem, model.feature_importances_to nie pomaga.

Czy jest jakiś sposób na osiągnięcie tego?

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

W tej chwili używam model.predict([features])do tego, ale potrzebuję go w pliku Excela.

Tasos
źródło
2
Losowy regresor lasu jest losowym lasem decision trees, więc nie otrzymasz jednego równania, tak jak w przypadku regresji liniowej. Zamiast tego otrzymasz if, then, elsesporo logiki i wiele ostatecznych równań, aby zamienić końcowe liście w wartości liczbowe. Nawet jeśli potrafisz wyobrazić sobie drzewo i wyciągnąć całą logikę, wszystko wydaje się być wielkim bałaganem. Jeśli pracujesz w programie Excel, może pomyśl o szkoleniu swojego modelu w programie Excel przy użyciu platformy Azure. Jednak prawdopodobnie po prostu wywołałbym pytona z poziomu programu Excel.
AN6U5
Biorąc średnią każdego liścia nie będzie działać? Wypróbowałem również model regresji liniowej, a różnica mieści się w granicach. Jeśli więc nie ma rozsądnego i wydajnego sposobu wyeksportowania losowego lasu, może być konieczne cofnięcie się do regresji liniowej.
Tasos
1
Dziękuję, ale wiedziałem o tym w LR. Czy możesz dołączyć do swoich komentarzy do odpowiedzi, aby oznaczyć ją jako odpowiedź?
Tasos
Prawdopodobnie warto zostawić / pozostawić bez odpowiedzi przez kilka dni, aby sprawdzić, czy ktoś inny ma użyteczny wgląd. Wymiana stosu danych naukowych jest znacznie mniejsza niż przepełnienie stosu, więc uzyskanie dobrych wnikliwych odpowiedzi zajmuje 2-3 dni.
AN6U5

Odpowiedzi:

1

SKompiler biblioteka może pomóc:

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

Sprawdź ten film .

KT.
źródło
0

Zamiast eksportować odważniki, możesz wyeksportować model do pliku marynowanego i użyć xlwings do odczytania danych z arkusza kalkulacyjnego, załadowania marynowanego modelu i uruchomienia prognozy Oto podobne pytania .

Olel Daniel
źródło
0

Myślę, że chcesz wyodrębnić całą logikę, a następnie różne drzewa, aby skończyć na ostatecznym regresorze. W tym celu musisz najpierw wyodrębnić logikę każdego drzewa, a następnie wyodrębnić sposób, w jaki ścieżki te są przestrzegane. Scikit learn może to zapewnić poprzez .decision_path (X), z X pewnym zestawem danych do przewidzenia. Stąd dowiesz się, jak losowy las przewiduje i jaką logikę stosuje się na każdym kroku.

Po wyodrębnieniu ścieżki decyzyjnej możesz użyć interpretera drzewa, aby uzyskać „formułę” wyszkolonego lasu losowego. Nie znam tego interpretatora drzew, ale wydaje się, że działa on bezpośrednio na wyszkolonym przez ciebie modelarzu, tj.

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
źródło