Exportar pesos (fórmula) do Random Forest Regressor no Scikit-Learn

9

Treinei um modelo de previsão com o Scikit Learn em Python (Random Forest Regressor) e quero extrair de alguma forma os pesos de cada recurso para criar uma ferramenta de excel para previsão manual.

A única coisa que encontrei é a model.feature_importances_mas não ajuda.

Existe alguma maneira de conseguir isso?

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

No momento, eu uso o model.predict([features])para fazê-lo, mas preciso em um arquivo do Excel.

Tasos
fonte
2
Um regressor de floresta aleatório é uma floresta aleatória de decision trees, portanto, você não obterá uma equação como a regressão linear. Em vez disso, você terá um monte de if, then, elselógica e muitas equações finais para transformar as folhas finais em valores numéricos. Mesmo se você puder visualizar a árvore e retirar toda a lógica, tudo isso parece uma grande bagunça. Se você estiver trabalhando no Excel, talvez pense em apenas treinar seu modelo no Excel usando o Azure. No entanto, eu provavelmente chamaria o python no excel.
AN6U5
Tomando a média de cada folha não vai funcionar? Tentei também um modelo de regressão linear e a diferença está dentro dos limites. Portanto, se não houver uma maneira razoável e eficiente de exportar a floresta aleatória, talvez seja necessário voltar à regressão linear.
Tasos
11
Obrigado, mas eu estava ciente dessa maneira no LR. Você pode juntar seus comentários em uma resposta para que eu possa marcá-la como respondida?
Tasos 08/01
Provavelmente vale a pena ficar sem resposta por alguns dias para ver se outra pessoa tem informações úteis. A troca de pilha de ciência de dados é muito menor do que o estouro de pilha; portanto, leva de dois a três dias para obter boas respostas.
AN6U5

Respostas:

1

A biblioteca SKompiler pode ajudar:

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

Confira este vídeo .

KT.
fonte
0

Em vez de exportar os pesos, você pode exportar o modelo para um arquivo pickle e usar um xlwings para ler os dados da planilha, carregar o modelo pickled e executar uma previsão. Aqui estão algumas perguntas semelhantes .

Olel Daniel
fonte
0

Eu acho que você deseja extrair toda a lógica seguida pelas diferentes árvores para terminar no regressor final. Para isso, é necessário extrair primeiro a lógica de cada árvore e, em seguida, extrair como esses caminhos são seguidos. O Scikit learn pode fornecer isso através de .decision_path (X), com X alguns conjuntos de dados para prever. A partir daqui, você terá uma idéia de como a floresta aleatória prevê e qual lógica é seguida em cada etapa.

Depois de extrair o caminho da decisão, você pode usar o Tree Interpreter para obter a "fórmula" da Floresta Aleatória que você treinou. Não conheço esse intérprete de árvore, mas ele parece funcionar diretamente no modelador que você treinou, ou seja,

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
fonte