Экспорт весов (формула) из Случайного Лесного Регрессора в Scikit-Learn

9

Я обучил модель прогнозирования с помощью Scikit Learn на Python (Random Forest Regressor) и хочу каким-то образом извлечь вес каждой функции, чтобы создать превосходный инструмент для ручного прогнозирования.

Единственное, что я нашел, - model.feature_importances_но это не помогает.

Есть ли способ добиться этого?

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

На данный момент я использую model.predict([features])это, но мне нужно это в файле Excel.

Тасос
источник
2
Случайный лесной регрессор - это случайный лес decision trees, поэтому вы не получите одно уравнение, как с линейной регрессией. Вместо этого вы получите кучу if, then, elseлогики и множество окончательных уравнений, чтобы превратить конечные листы в числовые значения. Даже если вы можете визуализировать дерево и извлечь всю логику, все это кажется большим беспорядком. Если вы работаете в Excel, подумайте о том, чтобы просто обучить свою модель в Excel с помощью Azure. Тем не менее, я бы, вероятно, просто назвал Python из Excel.
AN6U5
Взятие среднего по каждому листу не подойдет? Я попробовал также модель линейной регрессии, и разница находится в пределах. Итак, если нет разумного и эффективного способа экспорта случайного леса, мне может потребоваться вернуться к линейной регрессии.
Тасос
1
Спасибо, но я знал об этом в ЛР. Можете ли вы присоединиться к вашим комментариям к ответу, чтобы я мог отметить его как ответ?
Тасос
Вероятно, стоит оставить / оставить без ответа пару дней, чтобы узнать, есть ли у кого-то еще полезное понимание. Обмен стеками в науке намного меньше, чем переполнение стека, поэтому иногда требуется 2-3 дня, чтобы получить хорошие проницательные ответы.
AN6U5

Ответы:

0

Вместо экспорта весов вы можете экспортировать модель в файл маринования и использовать xlwings, чтобы прочитать данные из электронной таблицы, загрузить маринованную модель и выполнить прогноз. Вот аналогичные вопросы .

Олель Даниэль
источник
0

Я предполагаю, что вы хотите извлечь всю логику, которой следуют различные деревья, чтобы в конечном итоге оказаться в конечном регрессоре. Для этого вам нужно сначала извлечь логику каждого дерева, а затем извлечь, как эти пути следуют. Scikit learn может обеспечить это с помощью .decision_path (X), где X - некоторый набор данных для прогнозирования. Отсюда вы получите представление о том, как случайный лес предсказывает и какую логику следует соблюдать на каждом этапе.

После того как вы извлекли путь решения, вы можете использовать Tree Interpreter, чтобы получить «формулу» случайного леса, который вы обучили. Я не знаком с этим интерпретатором дерева, но, похоже, он работает непосредственно с разработчиком модели, т.е.

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)
Диего
источник