Exportar pesos (fórmula) de Random Forest Regressor en Scikit-Learn

9

Entrené un modelo de predicción con Scikit Learn en Python (Random Forest Regressor) y quiero extraer de alguna manera los pesos de cada característica para crear una herramienta de Excel para la predicción manual.

Lo único que encontré es el model.feature_importances_pero no ayuda.

¿Hay alguna forma de lograrlo?

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

Por el momento, uso el model.predict([features])para hacerlo, pero lo necesito en un archivo de Excel.

Tasos
fuente
2
Un regresor de bosque aleatorio es un bosque aleatorio de decision trees, por lo que no obtendrá una ecuación como lo hace con la regresión lineal. En cambio, obtendrás un montón de if, then, elselógica y muchas ecuaciones finales para convertir las hojas finales en valores numéricos. Incluso si puede visualizar el árbol y extraer toda la lógica, todo esto parece un gran desastre. Si está trabajando en Excel, quizás piense en entrenar a su modelo en Excel usando Azure. Sin embargo, probablemente llamaría a Python desde Excel.
AN6U5
¿Tomar el promedio de cada hoja no funcionará? También probé un modelo de regresión lineal y la diferencia está dentro de los límites. Entonces, si no hay una manera razonable y eficiente de exportar el bosque aleatorio, es posible que deba retroceder a la regresión lineal.
Tasos
1
Gracias pero estaba al tanto de esto en LR. ¿Puedes unir tus comentarios a una respuesta para que yo pueda marcarla como contestada?
Tasos
Probablemente valga la pena dejarlo sin respuesta durante un par de días para ver si alguien más tiene información útil. El intercambio de pila de ciencia de datos es mucho más pequeño que el desbordamiento de pila, por lo que a veces se necesitan 2-3 días para obtener buenas respuestas perspicaces.
AN6U5

Respuestas:

1

La biblioteca SKompiler podría ayudar:

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

Mira este video .

KT.
fuente
0

En lugar de exportar los pesos, puede exportar el modelo a un archivo pickle y usar un xlwings para leer los datos de la hoja de cálculo, cargar el modelo en escabeche y ejecutar una predicción. Aquí hay preguntas similares .

Olel Daniel
fuente
0

Supongo que quieres extraer toda la lógica seguida por los diferentes árboles para terminar en el regresor final. Para eso, primero debe extraer la lógica de cada árbol y luego extraer cómo se siguen esos caminos. Scikit learn puede proporcionar eso a través de .decision_path (X), con X algún conjunto de datos para predecir. A partir de aquí, tendrá una idea de cómo predice el bosque aleatorio y qué lógica se sigue en cada paso.

Una vez que haya extraído el decision_path, puede usar Tree Interpreter para obtener la "fórmula" del Bosque aleatorio que entrenó. No estoy familiarizado con este intérprete de árbol, pero parece funcionar directamente en el modelador que ha entrenado, es decir,

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
fuente