Алгоритм дерева регрессии с моделями линейной регрессии в каждом листе


14

Короткая версия: я ищу R-пакет, который может строить деревья решений, тогда как каждый лист в дереве решений является полной моделью линейной регрессии. AFAIK, библиотека rpartсоздает деревья решений, в которых зависимая переменная является постоянной в каждом листе. Есть ли другая библиотека (или rpartнастройка, о которой я не знаю), которая может создавать такие деревья?

Длинная версия: я ищу алгоритм, который строит дерево решений на основе набора обучающих данных. Каждое решение в дереве разделяет набор обучающих данных на две части в соответствии с условием одной из независимых переменных. Корень дерева содержит полный набор данных, и каждый элемент в наборе данных содержится ровно в одном листовом узле.

Алгоритм выглядит так:

  1. Начните с полного набора данных, который является корневым узлом дерева. Выберите этот узел и назовем его N .
  2. Создание модели линейной регрессии , по данным в N .
  3. Если из N линейной модели «ы выше , чем некоторый порог & thetas ; R 2 , то мы сделали с N , поэтому отметьте N , как лист , и перейти к шагу 5.R2NθR2NN
  4. Попробуйте случайных решений и выберите тот, который дает лучший R 2 в подузлах: nR2
    • Выберите случайную независимую переменную , а также случайный порог θ i .viθi
    • Решение разбивает набор данных N в двух новых узлов, N и ~ N .viθiNN^N~
    • Создание модели линейной регрессии на обоих N и ~ N , и вычислить их R 2 (назовем их R и ~ г ).N^N~R2r^r~
    • Из всех этих кортежей ( v я , θ я , г , ~ г ) , выберите один с максимальным м я п ( г , ~ г ) . Это дает новое решение в дереве, и N имеет два новых подузлы N и ~ N .n(vi,θi,r^,r~)min(r^,r~)NN^N~
  5. Мы закончили обработку . Выберите новый узел N, который еще не был обработан, и вернитесь к шагу 2. Если все узлы были обработаны, алгоритм завершается.NN

Это рекурсивно построит дерево решений, которое разбивает данные на более мелкие части и вычисляет линейную модель для каждой из этих частей.

Шаг 3 - это условие выхода, которое предотвращает переопределение алгоритма. Конечно, есть и другие возможные условия выхода:

  • Выход, если глубина в дереве выше θ d e p t hNθdepth
  • Выход, если набор данных в меньше, чем θ d a t a s e tNθdataset

Есть ли такой алгоритм в пакете R?


4
Взгляните на пакет для вечеринки и посмотрите, подходит ли вам это. Он может обрабатывать несколько типов моделей в узлах деревьев IIRC.
Восстановить Монику - Г. Симпсон

Ответы:


11

Хотя они работают не так, как ваш алгоритм, я считаю, что вам нравятся mob () и FTtree. Для толпы Zeileis' см http://cran.r-project.org/web/packages/party/vignettes/MOB.pdf Для FTtree, функциональные деревья Гама реализация доступна в Weka и , таким образом , RWeka. См. Http://cran.r-project.org/web/packages/RWeka/index.html для получения подробной информации.


1
+1 для моба, который позволяет подключить практически любую модель к рекурсивному фреймворку
etov

8

Пакет RWeka предлагает множество методов регрессии. Среди них вы можете найти M5P (M5 Prime), которая представляет собой модель регрессии на основе дерева с линейными уравнениями в листах. Для получения дополнительной информации о методе M5 см. Публикацию .

Пример кода будет:

library(RWeka)
M5_model = M5P (Dep_var ~ ., data = train, control = Weka_control(N=F, M=10))
train_predicted = predict(M5_model, train)
test_predicted = predict(M5_model, test)

Если вы хотите использовать пакетный ансамбль с методом M5, попробуйте что-то вроде:

M5_bag = Bagging(Dep_var ~ ., data = train, control = Weka_control(P=100, I = 100, W = list("weka.classifiers.trees.M5P", M = 4)))

Чтобы увидеть параметры управления для модели M5P, попробуйте:

WOW(M5P)

Если вы хотите оптимизировать метод M5, для этого есть решение в caretпакете:

library(caret)
Optimization = train (Dep_var ~ .,data = train, method = 'M5')

7

Я думаю, что это отвечает на короткую версию вашего вопроса:

Пакет Cubist подходит для моделей, основанных на правилах (аналогично деревьям), с моделями линейной регрессии в конечных листьях, коррекциями на основе экземпляров и усилением.

С точки зрения задачи Крана: Машинное обучение


Вы знаете, является ли это (похож на) M5 Quinlan?
Момо

Я знаю, что это похоже на M5 Квинлана, поскольку Кубист Квинлана похож на M5 Квинлана .
Джек Райан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.