microsoftml.rx_fast_linear: линейная модель со стохастическим двухкоординатным подъемом
Использование
microsoftml.rx_fast_linear()
Описание
Модуль обучения оптимизации стохастического двухкоординатного подъема (SDCA) для линейной двоичной классификации и регрессии.
Сведения
rx_fast_linear
— это модуль обучения на основе метода стохастического двухкоординатного подъема (SDCA), самого современного способа оптимизации для выпуклых целевых функций. Алгоритм можно масштабировать для использования в больших наборах данных, не находящихся в памяти, из-за частично асинхронной реализации, которая поддерживает многопоточность.
Конвергенция обеспечивается путем периодической принудительной синхронизации между первичными и двойными обновлениями в отдельном потоке. Также предоставляется несколько вариантов функций потерь. Метод SDCA сочетает в себе несколько наилучших свойств и возможностей алгоритмов логистической регрессии и SVM.
Дополнительные сведения о методе SDCA см. в статьях, указанных в разделе "Ссылки".
Традиционные алгоритмы оптимизации, такие как метод стохастического градиентного спуска (SGD), оптимизируют эмпирическую функцию потерь напрямую. В методе SDCA используется другой подход — с оптимизацией двойной задачи. Функция двойных потерь параметризуется по весам примеров. В каждой итерации при считывании примера обучения из набора обучающих данных соответствующий вес примера корректируется таким образом, чтобы функция двойных потерь была оптимизирована по отношению к текущему примеру. Метод SDCA не использует скорость обучения для определения размера шага в отличие от различных методов градиентного спуска.
rx_fast_linear
сейчас поддерживает двоичную классификацию с тремя типами функций потерь: логистическая функция потерь, кусочно-линейная функция потерь и сглаженная кусочно-линейная функция потерь.
Для линейной регрессии также поддерживается квадратичная функция потерь. Регуляризацию эластичной сети можно указать с помощью параметров l2_weight
и l1_weight
. Обратите внимание, что l2_weight
влияет на скорость конвергенции. В целом, чем больше l2_weight
, тем быстрее выполняется конвергенция в методе SDCA.
Обратите внимание, что rx_fast_linear
является стохастическим и потоковым алгоритмом оптимизации. Результаты зависят от порядка обучающих данных. Для получения воспроизводимых результатов рекомендуется установить значение False
для shuffle
и значение 1
для train_threads
.
Аргументы
formula
Формула, описанная в revoscalepy.rx_formula.
Члены взаимодействия и F()
сейчас не поддерживаются в microsoftml.
.
Объект источника данных или символьная строка, указывающая файл .xdf или объект кадра данных.
method
Указывает тип модели с символьной строкой: "binary"
для двоичной классификации по умолчанию и "regression"
для линейной регрессии.
loss_function
Указывает эмпирическую функцию потерь, которую необходимо оптимизировать. Для двоичной классификации доступны следующие варианты.
log_loss
: логистическая функция потерь. Это значение по умолчанию.hinge_loss
: кусочно-линейная функция потерь SVM. Ее параметр представляет размер поля.smooth_hinge_loss
: сглаженная кусочно-линейная функция потерь. Ее параметр представляет постоянную сглаживания.
Для линейной регрессии сейчас поддерживается квадратичная функция потерь squared_loss
. Если для этого параметра задано значение None, его значение по умолчанию зависит от типа обучения:
log_loss
для двоичной классификации.squared_loss
для линейной регрессии.
В следующем примере loss_function изменяется на hinge_loss
: rx_fast_linear(..., loss_function=hinge_loss())
.
l1_weight
Задает вес регуляризации L1. Значение должно быть неотрицательным или равным None. Если указано значение None, фактическое значение будет вычисляться автоматически на основе набора данных. Значение по умолчанию: None.
l2_weight
Задает вес регуляризации L2. Значение должно быть неотрицательным или равным None. Если указано значение None, фактическое значение будет вычисляться автоматически на основе набора данных. Значение по умолчанию: None.
train_threads
Указывает, сколько параллельных потоков можно использовать для выполнения алгоритма. Если этот параметр имеет значение None, количество используемых потоков определяется на основе количества логических процессоров, доступных для процесса, а также степени незаполненности данных. Задайте для него значение 1
, чтобы запустить алгоритм в одном потоке.
convergence_tolerance
Задает пороговое значение допуска, используемое в качестве критерия конвергенции. Значение должно находиться в диапазоне от 0 до 1. Значение по умолчанию — 0.1
. Алгоритм считается конвергированным, если относительный разрыв двойственности, который представляет собой отношение между разрывом двойственности и первичными потерями, опускается ниже указанного допуска конвергенции.
max_iterations
Задает верхнюю границу количества итераций обучения. Этот параметр должен быть положительным или иметь значение None. Если указано значение None, фактическое значение будет вычисляться автоматически на основе набора данных. Для каждой итерации требуется полный проход по обучающим данным. Обучение завершается после того, как общее число итераций достигает указанной верхней границы, или когда функция потери конвергируется, в зависимости от того, что происходит раньше.
shuffle
Указывает, следует ли перемешивать обучающие данные. Укажите значение True
, чтобы перемешивать данные, и значение False
, чтобы не перемешивать данные. Значение по умолчанию — True
. SDCA — это стохастический алгоритм оптимизации. Если перемешивание включено, обучающие данные сортируются в случайном порядке в каждой итерации.
check_frequency
Число итераций, после которых функция потерь вычислена и проверяется на конвергентность. Указываемое значение должно быть положительным целым числом или None. Если указано значение None, фактическое значение будет вычисляться автоматически на основе набора данных. В противном случае, например, если указано значение checkFrequency = 5
, вычисляется функция потерь и конвергенция проверяется каждые 5 итераций. Для вычисления функции потерь требуется отдельный полный проход по обучающим данным.
normalize
Указывает тип используемой автоматической нормализации:
"Auto"
: если требуется нормализация, она выполняется автоматически. Это значение по умолчанию."No"
: нормализация не выполняется."Yes"
: нормализация выполняется."Warn"
: если требуется нормализация, отображается предупреждение, но нормализация не выполняется.
Нормализация подгоняет разрозненные диапазоны данных к стандартному масштабу. Масштабирование признаков гарантирует, что расстояния между точками данных пропорциональны, и включает различные методы оптимизации (например, градиентный спуск) для ускоренного схождения. Если нормализация выполняется, используется нормализатор MaxMin
. Он нормализует значения в интервале [a, b], где -1 <= a <= 0
, 0 <= b <= 1
и b - a = 1
. Этот нормализатор сохраняет степень незаполненности, сопоставляя ноль с нолем.
ml_transforms
Указывает список преобразований Машинного обучения Майкрософт, которые необходимо выполнить с данными до обучения, или значение None, если преобразования не нужно выполнять. Сведения о поддерживаемых трансформациях см. в разделах featurize_text
, categorical
и categorical_hash
.
Эти преобразования выполняются после любых заданных преобразований Python.
Значение по умолчанию — None.
ml_transform_vars
Указывает символьный вектор имен переменных, используемых в ml_transforms
, или значение None, если их не нужно использовать.
Значение по умолчанию — None.
row_selection
НЕ ПОДДЕРЖИВАЕТСЯ. Указывает записи (наблюдения) из набора данных, которые будут использоваться моделью с именем логической переменной из набора данных (в кавычках) или логическим выражением с указанием переменных в наборе данных. Пример:
row_selection = "old"
будет использовать только те наблюдения, в которых значение переменнойold
равноTrue
.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
использует только те наблюдения, в которых значение переменнойage
находится в диапазоне от 20 до 65, а значениеlog
переменнойincome
больше 10.
Выбор записей осуществляется после обработки всех преобразований данных (см. аргументы transforms
или transform_function
). Как и со всеми выражениями, row_selection
можно определить за пределами вызова функции с помощью функции expression
.
преобразования
НЕ ПОДДЕРЖИВАЕТСЯ. Выражение формы, представляющее первый круг преобразования переменных. Как и со всеми выражениями, transforms
(или row_selection
) можно определить за пределами вызова функции с помощью функции expression
.
transform_objects
НЕ ПОДДЕРЖИВАЕТСЯ. Именованный список с объектами, на которые можно ссылаться с помощью transforms
, transform_function
и row_selection
.
transform_function
Функция преобразования переменной.
transform_variables
Символьный вектор для переменных входного набора данных, требуемый для функции преобразования.
transform_packages
НЕ ПОДДЕРЖИВАЕТСЯ. Символьный вектор, определяющий дополнительные пакеты Python (за исключением пакетов, указанных в RxOptions.get_option("transform_packages")
), которые будут доступны и предварительно загружены для использования в функциях преобразования переменных.
Например, явно определенные в функциях revoscalepy через свои аргументы transforms
и transform_function
или неявно определенные через свои аргументы formula
или row_selection
. Аргумент transform_packages
также может иметь значение None, указывающее на то, что пакеты, указанные за пределами RxOptions.get_option("transform_packages")
, не будут предварительно загружаться.
transform_environment
НЕ ПОДДЕРЖИВАЕТСЯ. Определяемая пользователем среда, выступающая в роли родительской среды для всех разработанных внутренних сред и используемая для преобразования данных переменных.
При transform_environment = None
значении используется новая "хэш-среда" с родительским revoscalepy.baseenv.
blocks_per_read
Указывает количество считываемых блоков для каждого фрагмента данных, считываемого из источника данных.
report_progress
Целочисленное значение, указывающее уровень информирования по ходу обработки строки:
0
— информирование не осуществляется.1
— выводится и обновляется число обработанных записей.2
— выводятся данные об обработанных записях и времени обработки.3
— выводятся данные об обработанных записях и все данные о времени обработки.
verbose
Целочисленное значение, указывающее требуемый объем выходных данных.
Если задано значение 0
, при вычислениях подробные выходные данные не выводятся. Целочисленные значения из диапазона от 1
до 4
позволяют увеличить объем информации.
compute_context
Задает контекст, в котором выполняются вычисления, указанные с помощью допустимого значения revoscalepy.RxComputeContext. Сейчас поддерживаются локальные контексты и контексты вычислений revoscalepy.RxInSqlServer.
ensemble
Параметры управления для сборки.
Возвращаемое значение
Объект FastLinear
с обученной моделью.
Примечание
Этот алгоритм является многопоточным и не будет пытаться загрузить весь набор данных в память.
См. также
hinge_loss
, log_loss
, smoothed_hinge_loss
, squared_loss
, rx_predict
Ссылки
Масштабирование метода стохастического двухкоординатного подъема
Методы стохастического двухкоординатного подъема для регуляризованной минимизации потерь
Пример двоичной классификации
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
infert = get_dataset("infert")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)
forest_model = rx_fast_linear(
formula=" isCase ~ age + parity + education + spontaneous + induced ",
data=data_train)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_model, data=data_test,
extra_vars_to_write=["isCase", "Score"])
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))
Выходные данные:
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
isCase PredictedLabel Score Probability
0 True True 0.990544 0.729195
1 False False -2.307120 0.090535
2 False False -0.608565 0.352387
3 True True 1.028217 0.736570
4 True False -3.913066 0.019588
Пример регрессии
'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
attitude = get_dataset("attitude")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)
model = rx_fast_linear(
formula="rating ~ complaints + privileges + learning + raises + critical + advance",
method="regression",
data=data_train)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
extra_vars_to_write=["rating"])
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))
Выходные данные:
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
rating Score
0 71.0 72.630440
1 67.0 56.995350
2 67.0 52.958641
3 72.0 80.894539
4 50.0 38.375427