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


rxFastLinear: быстрая линейная модель — стохастический двухкоординатный подъем

Модуль обучения оптимизации стохастического двухкоординатного подъема (SDCA) для линейной двоичной классификации и регрессии.

rxFastLinear — это модуль обучения на основе метода стохастического двухкоординатного подъема (SDCA), самого современного способа оптимизации для выпуклых целевых функций. Алгоритм можно масштабировать для использования в больших наборах данных, не находящихся в памяти, из-за частично асинхронной реализации, которая поддерживает многопоточность. Первоначальные и двойные обновления в отдельном потоке. Также предоставляется несколько вариантов функций потерь. Метод SDCA сочетает в себе несколько наилучших свойств и возможностей алгоритмов логистической регрессии и SVM. Дополнительные сведения о методе SDCA см. в статьях, указанных в разделе "Ссылки".

Традиционные алгоритмы оптимизации, такие как метод стохастического градиентного спуска (SGD), оптимизируют эмпирическую функцию потерь напрямую. В методе SDCA используется другой подход — с оптимизацией двойной задачи. Функция двойных потерь параметризуется по весам примеров. В каждой итерации при считывании примера обучения из набора обучающих данных соответствующий вес примера корректируется таким образом, чтобы функция двойных потерь была оптимизирована по отношению к текущему примеру. Метод SDCA не использует скорость обучения для определения размера шага в отличие от различных методов градиентного спуска.

rxFastLinear сейчас поддерживает двоичную классификацию с тремя типами функций потерь: логистическая функция потерь, кусочно-линейная функция потерь и сглаженная кусочно-линейная функция потерь. Для линейной регрессии также поддерживается квадратичная функция потерь. Регуляризацию эластичной сети можно указать с помощью параметров l2Weight и l1Weight. Обратите внимание, что l2Weight влияет на скорость конвергенции. В целом, чем больше l2Weight, тем быстрее выполняется конвергенция в методе SDCA.

Обратите внимание, что rxFastLinear является стохастическим и потоковым алгоритмом оптимизации. Результаты зависят от порядка данных для обучения. Для получения воспроизводимых результатов рекомендуется установить значение FALSE для shuffle и значение 1 для trainThreads.

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

  rxFastLinear(formula = NULL, data, type = c("binary", "regression"),
    lossFunction = NULL, l2Weight = NULL, l1Weight = NULL,
    trainThreads = NULL, convergenceTolerance = 0.1, maxIterations = NULL,
    shuffle = TRUE, checkFrequency = NULL, normalize = "auto",
    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 = 1,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

Аргументы

formula

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

data

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

type

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

lossFunction

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

  • logLoss — логарифмическая функция потерь. Это значение по умолчанию.
  • hingeLoss — кусочно-линейная функция потерь SVM. Ее параметр представляет размер поля.
  • smoothHingeLoss — сглаженная кусочно-линейная функция потерь. Ее параметр представляет постоянную сглаживания.
    Для линейной регрессии сейчас поддерживается квадратичная функция потерь squaredLoss. Если для этого параметра задано значение NULL, его значение по умолчанию зависит от типа обучения:
  • logLoss — для двоичной классификации.
  • squaredLoss — для линейной регрессии.

l2Weight

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

l1Weight

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

trainThreads

Указывает, сколько параллельных потоков можно использовать для выполнения алгоритма. Если этот параметр имеет значение NULL, количество используемых потоков определяется на основе количества логических процессоров, доступных для процесса, а также степени незаполненности данных. Задайте для него значение 1, чтобы запустить алгоритм в одном потоке.

convergenceTolerance

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

maxIterations

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

shuffle

Указывает, следует ли перемешивать обучающие данные. Укажите значение TRUE, чтобы перемешивать данные, и значение FALSE, чтобы не перемешивать данные. Значение по умолчанию — TRUE. SDCA — это стохастический алгоритм оптимизации. Если перемешивание включено, обучающие данные сортируются в случайном порядке в каждой итерации.

checkFrequency

Число итераций, после которых функция потерь вычислена и проверяется на конвергентность. Указываемое значение должно быть положительным целым числом или NULL. Если указано значение NULL, фактическое значение будет вычисляться автоматически на основе набора данных. В противном случае, например, если указано значение checkFrequency = 5, вычисляется функция потерь и конвергенция проверяется каждые 5 итераций. Для вычисления функции потерь требуется отдельный полный проход по обучающим данным.

normalize

Указывает тип используемой автоматической нормализации:

  • "auto": если требуется нормализация, она выполняется автоматически. Это значение по умолчанию.
  • "no": нормализация не выполняется.
  • "yes": нормализация выполняется.
  • "warn": если требуется нормализация, отображается предупреждение, но нормализация не выполняется.
    Нормализация подгоняет разрозненные диапазоны данных к стандартному масштабу. Масштабирование признаков гарантирует, что расстояния между точками данных пропорциональны, и включает различные методы оптимизации (например, градиентный спуск) для ускоренного схождения. Если нормализация выполняется, используется нормализатор MaxMin. Он нормализует значения в интервале [a, b], где -1 <= a <= 0, 0 <= b <= 1 и b - a = 1. Этот нормализатор сохраняет степень незаполненности, сопоставляя ноль с нолем.

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.

Значение

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

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

Примечания

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

Авторы

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

Ссылки

Scaling Up Stochastic Dual Coordinate Ascent

Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization

См. также

logLoss, hingeLoss, smoothHingeLoss, squaredLoss, rxFastTrees, rxFastForest, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.

Примеры


 # Train a binary classiication model with rxFastLinear
 res1 <- rxFastLinear(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert,
                   type = "binary")
 # Print a summary of the model
 summary(res1)

 # Score to a data frame
 scoreDF <- rxPredict(res1, data = infert, 
     extraVarsToWrite = "isCase")

 # Compute and plot the Radio Operator Curve and AUC
 roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF) 
 plot(roc1)
 rxAuc(roc1)

 #########################################################################
 # rxFastLinear Regression

 # Create an xdf file with the attitude data
 myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
 rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
 myXdfDS <- RxXdfData(file = myXdf)

 attitudeForm <- rating ~ complaints + privileges + learning + 
     raises + critical + advance

 # Estimate a regression model with rxFastLinear 
 res2 <- rxFastLinear(formula = attitudeForm,  data = myXdfDS, 
     type = "regression")

 # Score to data frame
 scoreOut2 <- rxPredict(res2, data = myXdfDS, 
     extraVarsToWrite = "rating")

 # Plot the rating versus the score with a regression line
 rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)

 # Clean up   
 file.remove(myXdf)