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

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