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)