Експорт ваг (формула) з випадкових лісових регресорів у Scikit-Learn


9

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

Єдине, що я знайшов - це, 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
Дякую, але я знав про це в LR. Чи можете ви приєднатись до ваших коментарів щодо відповіді, щоб я міг позначити її як відповідь?
Тасос

Напевно, варто залишити / не відповісти на пару днів, щоб побачити, чи є хтось ще корисний для розуміння. Обмін стеком даних в науці набагато менший, ніж переповнення стека, тому часом потрібно 2-3 дні, щоб отримати хороші проникливі відповіді.
AN6U5

Відповіді:



0

Замість того, щоб експортувати ваги, ви можете експортувати модель у файл підберезника та використовувати xlwings для читання даних з електронної таблиці, завантаження маринованої моделі та запуску прогнозу Ось подібні запитання .


0

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

Після того, як ви вилучили шлях рішення, ви можете скористатися Інтерпретатором дерева, щоб отримати "формулу" Випадкового лісу, який ви навчили. Я не знайомий з цим перекладачем дерев, але, здається, він працює безпосередньо на моделері, якого ви навчили, тобто

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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.