Поделиться через


rxFastTrees: быстрое дерево

Машинное обучение: быстрый лес

Использование

  rxFastTrees(formula = NULL, data, type = c("binary", "regression"),
    numTrees = 100, numLeaves = 20, learningRate = 0.2, minSplit = 10,
    exampleFraction = 0.7, featureFraction = 1, splitFraction = 1,
    numBins = 255, firstUsePenalty = 0, gainConfLevel = 0,
    unbalancedSets = FALSE, trainThreads = 8, randomSeed = NULL,
    mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
    transforms = NULL, transformObjects = NULL, transformFunc = NULL,
    transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
    blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 2,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

Аргументы

formula

Формула, описанная в статье, посвященной rxFormula. Условия взаимодействия и F() в настоящее время не поддерживаются в MicrosoftML.

data

Объект источника данных или символьная строка, указывающая файл .xdf или объект кадра данных.

type

Символьная строка, указывающая тип быстрого дерева: "binary" для двоичной классификации быстрых деревьев по умолчанию или "regression" для регрессии быстрых деревьев.

numTrees

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

numLeaves

Максимальное число листовых узлов (терминальных узлов), которые могут быть созданы в любом дереве. Более высокие значения потенциально увеличивают размер дерева и обеспечивают повышенную точность, но при этом возникает риск лжевзаимосвязи и требуется больше времени на обучение. Значение по умолчанию — 20.

learningRate

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

minSplit

Минимальное число обучающих экземпляров, необходимых для формирования листового узла. То есть минимальное число документов, разрешенных на листовом узле дерева регрессии, из данных подвыборки. Часть split означает, что признаки на каждом уровне дерева (узла) распределяются случайным образом. Значение по умолчанию — 10. Учитывается только число экземпляров, даже если они имеют разный вес.

exampleFraction

Доля случайно выбранных экземпляров, используемых для каждого дерева. Значение по умолчанию — 0,7.

featureFraction

Доля случайно выбранных признаков, используемых для каждого дерева. Значение по умолчанию — 1.

splitFraction

Доля случайно выбранных признаков, используемых для каждого разбиения. Значение по умолчанию — 1.

numBins

Максимальное число уникальных значений (интервалов) на признак. Если число значений признака меньше указанного числа, каждое значение помещается в собственный интервал. Если число значений больше этого числа, алгоритм создает numBins интервалов.

firstUsePenalty

Признак, который первым использует штрафной коэффициент. Это форма регуляризации, которая получает штраф за использование новой функции при создании дерева. Увеличьте это значение, чтобы создать деревья, которые не используют большое число признаков. Значение по умолчанию — 0.

gainConfLevel

Соответствие дерева требованию к степени надежности (должно находиться в диапазоне [0, 1)). Значение по умолчанию — 0.

unbalancedSets

Если TRUE, используются производные, оптимизированные для несбалансированных наборов. Применимо, только если значение type равно "binary". Значение по умолчанию — FALSE.

trainThreads

Число потоков для использования при обучении. Значение по умолчанию: 8.

randomSeed

Задает случайное начальное значение. Значение по умолчанию — NULL.

mlTransforms

Указывает список преобразований данных MicrosoftML, которые необходимо выполнить до обучения, или значение NULL, если преобразования выполнять не нужно. Сведения о поддерживаемых преобразованиях см. на страницах о функциях featurizeText, categorical и categoricalHash. Эти преобразования выполняются после любых заданных преобразований R. Значение по умолчанию — NULL.

mlTransformVars

Указывает символьный вектор имен переменных, используемых в mlTransforms, или значение NULL, если их не нужно использовать. Значение по умолчанию — NULL.

rowSelection

Указывает записи (наблюдения) из набора данных, которые будут использоваться моделью с именем логической переменной из набора данных (в кавычках) или логическим выражением с указанием переменных в наборе данных. Например, rowSelection = "old" будет использовать только те наблюдения, в которых значение переменной old равно TRUE. rowSelection = (age > 20) & (age < 65) & (log(income) > 10) использует только те наблюдения, в которых значение переменной age находится в диапазоне от 20 до 65, а значение log переменной income больше 10. Выбор записей осуществляется после обработки всех преобразований данных (см. аргументы transforms или transformFunc). Как и все выражения, rowSelection можно определить вне вызова функции с помощью функции выражения.

transforms

Выражение формы list(name = expression, ``...), представляющее первый цикл преобразования переменных. Как и все выражения, transforms (или rowSelection) можно определить за пределами вызова функции с помощью функции выражения.

transformObjects

Именованный список с объектами, на которые можно ссылаться с помощью transforms, transformsFunc и rowSelection.

transformFunc

Функция преобразования переменной. Дополнительные сведения см. на странице, посвященной rxTransform.

transformVars

Символьный вектор для переменных входного набора данных, требуемый для функции преобразования. Дополнительные сведения см. на странице, посвященной rxTransform.

transformPackages

Символьный вектор, определяющий дополнительные пакеты R (за исключением пакетов, указанных в rxGetOption("transformPackages")), которые будут доступны и предварительно загружены для использования в функциях преобразования переменных. Например, пакеты, явно определенные в функциях RevoScaleR через аргументы transforms и transformFunc или неявно определенные через аргументы formula или rowSelection. Аргумент transformPackages также может иметь значение NULL, указывающее на то, что пакеты, указанные за пределами rxGetOption("transformPackages"), не будут предварительно загружаться.

transformEnvir

Определяемая пользователем среда, выступающая в роли родительской среды для всех разработанных внутренних сред и используемая для преобразования данных переменных. Если указано значение transformEnvir = NULL, используется новая среда hash с родительской средой baseenv().

blocksPerRead

Указывает количество считываемых блоков для каждого фрагмента данных, считываемого из источника данных.

reportProgress

Целочисленное значение, указывающее уровень информирования по ходу обработки строки:

  • 0 — информирование не осуществляется.
  • 1 — выводится и обновляется число обработанных записей.
  • 2 — выводятся данные об обработанных записях и времени обработки.
  • 3 — выводятся данные об обработанных записях и все данные о времени обработки.

verbose

Целочисленное значение, указывающее требуемый объем выходных данных. Если задано значение 0, при вычислениях подробные выходные данные не выводятся. Целочисленные значения из диапазона от 1 до 4 позволяют увеличить объем информации.

computeContext

Задает контекст, в котором выполняются вычисления, указанные с помощью допустимого значения RxComputeContext. Сейчас поддерживаются локальные контексты и контексты вычислений RxInSqlServer.

ensemble

Параметры управления для сборки.

...

Дополнительные аргументы, передаваемые непосредственно в Microsoft Compute Engine.

Подробнее

rxFastTrees — это реализация FastRank. FastRank — это эффективная реализация алгоритма градиентного усиления MART. Градиентный бустинг — это метод машинного обучения для проблем регрессии. Он пошагово создает каждое дерево регрессии, используя стандартную функцию потерь для измерения ошибок в каждом шаге и их исправления в следующем. Поэтому такая модель прогнозирования фактически является набором более слабых моделей прогнозирования. В задачах регрессии при усилении пошагово создается серия деревьев, а затем с помощью произвольной дифференцируемой функции потерь выбирается оптимальное дерево.

MART изучает набор деревьев регрессии, который является деревом принятия решений со скалярными значениями в листовых узлах. Дерево принятия решений (регрессии) — это древовидная блок-схема, в которой на каждом внутреннем узле принимается решение, какой из двух дочерних узлов использовать дальше, на основе одного из значений функции из входных данных. Значение возвращается в каждом листовом узле. Во внутренних узлах решение зависит от теста "x <= v", где x — это значение функции во входной выборке, а v — одно из возможных значений этой функции. Функции, которые могут создаваться с помощью дерева регрессии, представляют собой кусочные функции-константы.

Набор деревьев создается путем вычисления (на каждом этапе) дерева регрессии, которое получает приближение градиента функции потерь и добавляет его в предыдущее дерево с коэффициентами, которые минимизируют потери нового дерева. Выходные данные набора, произведенного MART на базе данного экземпляра, составляют сумму трех вариантов выходных данных.

Для проблемы бинарной классификации выходные данные преобразуются в вероятность с использованием того или иного варианта калибровки.

Для проблем регрессии выходные данные представляют собой спрогнозированное значение функции.

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

Если для type задано значение "regression", используется версия регрессии FastTree. Если задано значение "ranking", используется версия ранжирования FastTree. В случае ранжирования экземпляры нужно упорядочить по выходным данным набора деревьев. Единственное различие в параметрах этих версий заключается в параметрах калибровки, которые требуются только для классификации.

Значение

rxFastTrees — объект rxFastTrees с обученной моделью.

FastTree — объект спецификации обучения класса maml для модуля обучения быстрого дерева.

Примечания

Этот алгоритм является многопоточным и всегда будет пытаться загрузить весь набор данных в память.

Авторы

Корпорация Майкрософт Microsoft Technical Support

Ссылки

Wikipedia: Gradient boosting (Gradient tree boosting)

Greedy function approximation: A gradient boosting machine.

См. также

rxFastForest, rxFastLinear, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.

Примеры


 # Estimate a binary classification tree
 infert1 <- infert
 infert1$isCase = (infert1$case == 1)
 treeModel <- rxFastTrees(formula = isCase ~ age + parity + education + spontaneous + induced,
         data = infert1)

 # Create xdf file with per-instance results using rxPredict
 xdfOut <- tempfile(pattern = "scoreOut", fileext = ".xdf")
 scoreDS <- rxPredict(treeModel, data = infert1,
    extraVarsToWrite = c("isCase", "Score"), 
    outData = xdfOut)

 rxDataStep(scoreDS, numRows = 10)

 # Clean-up
 file.remove(xdfOut)

 ######################################################################
 # Estimate a regression fast tree

 # Use the built-in data set 'airquality' to create test and train data
 DF <- airquality[!is.na(airquality$Ozone), ]  
 DF$Ozone <- as.numeric(DF$Ozone)
 randomSplit <- rnorm(nrow(DF))
 trainAir <- DF[randomSplit >= 0,]
 testAir <- DF[randomSplit < 0,]
 airFormula <- Ozone ~ Solar.R + Wind + Temp

 # Regression Fast Tree for train data
 fastTreeReg <- rxFastTrees(airFormula, type = "regression", 
     data = trainAir)  

 # Put score and model variables in data frame
 fastTreeScoreDF <- rxPredict(fastTreeReg, data = testAir, 
     writeModelVars = TRUE)

 # Plot actual versus predicted values with smoothed line
 rxLinePlot(Score ~ Ozone, type = c("p", "smooth"), data = fastTreeScoreDF)