microsoftml.rx_fast_linear: Линейная модель со стохастическим двойным координатным восходом

Usage

microsoftml.rx_fast_linear()

Description

Стохастический тренер оптимизации с двойным координатным восходом (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 это алгоритм стохастической и потоковой оптимизации. Результаты зависят от порядка обучающих данных. Для воспроизводимых результатов рекомендуется устанавливать shuffle в False и train_threads в 1.

Arguments

формула

Формула, описанная в 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 — это стандартное значение.

l2_weight

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

train_threads

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

convergence_tolerance

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

max_iterations

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

перемешивать

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

check_frequency

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

нормализовать

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

  • "Auto": если требуется нормализация, она выполняется автоматически. Это выбор по умолчанию.

  • "No": нормализация не выполняется.

  • "Yes": выполняется нормализация.

  • "Warn": если требуется нормализация, отображается предупреждение, но нормализация не выполняется.

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

ml_transforms

Указывает список преобразований MicrosoftML для выполнения данных перед обучением или Нет , если преобразования не выполняются. См featurize_text. раздел , categoricalа также categorical_hashсведения о поддерживаемых преобразованиях. Эти преобразования выполняются после любых указанных преобразований Python. Значение по умолчанию — None.

ml_transform_vars

Указывает вектор символов имен переменных, используемых или ml_transformsнет , если они не используются. Значение по умолчанию — 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

НЕ ПОДДЕРЖИВАЕТСЯ. Именованный список, содержащий объекты, на которые можно ссылаться, transformstransform_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вместо этого используется новая среда hash с родительским revoscalepy.baseenv.

blocks_per_read

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

report_progress

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

  • 0: не сообщается о ходе выполнения.

  • 1: количество обработанных строк печатается и обновляется.

  • 2: отображаются строки, обрабатываемые и сроки.

  • 3: обрабатываются строки и сообщаются все сроки.

verbose

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

compute_context

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

Ансамбль

Управление параметрами для ensembling.

Returns

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

Замечание

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

Ссылки

Масштабирование стохастического двойного координатного восхода

Стохастические методы подъёма с двойной координатой для минимизации регулярных потерь

Пример двоичной классификации

'''
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

Функции потерь