microsoftml.rx_logistic_regression: логистическая регрессия

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

microsoftml.rx_logistic_regression(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], method: ['binary',
    'multiClass'] = 'binary', l2_weight: float = 1,
    l1_weight: float = 1, opt_tol: float = 1e-07,
    memory_size: int = 20, init_wts_diameter: float = 0,
    max_iterations: int = 2147483647,
    show_training_stats: bool = False, sgd_init_tol: float = 0,
    train_threads: int = None, dense_optimizer: bool = False,
    normalize: ['No', 'Warn', 'Auto', 'Yes'] = 'Auto',
    ml_transforms: list = None, ml_transform_vars: list = None,
    row_selection: str = None, transforms: dict = None,
    transform_objects: dict = None, transform_function: str = None,
    transform_variables: list = None,
    transform_packages: list = None,
    transform_environment: dict = None, blocks_per_read: int = None,
    report_progress: int = None, verbose: int = 1,
    ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
    compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)

Описание

Машинное обучение: логистическая регрессия

Сведения

Логистическая регрессия — это метод классификации, используемый для прогнозирования значения категориальной зависимой переменной на основе связи с одной или несколькими независимыми переменными, которые предположительно имеют логистическое распределение. Если зависимое значение имеет только два возможных значения (успех или неудача), логистическая регрессия будет двоичной. Если зависимая переменная имеет более двух возможных значений (группа крови по результатам диагностического теста), логистическая регрессия будет полиномиальной.

Метод оптимизации, используемый для rx_logistic_regression, — метод Бройдена — Флетчера — Голдфарба — Шэнно (L-BFGS). Как L-BFGS, так и обычные алгоритмы BFGS используют квазиньютоновские методы для оценки вычислительно ресурсоемкой матрицы Гессе в уравнении, используемом в методе Ньютона для вычисления шагов. Но приближение L-BFGS использует только ограниченный объем памяти, чтобы вычислить направление следующего шага, поэтому его оптимально использовать для проблем с большим числом переменных. Параметр memory_size указывает число хранимых прошлых позиций и градиентов для использования в вычислении следующего шага.

Этот обучаемый объект может использовать регуляризацию эластичной сети — линейное сочетание регуляризаций L1 (lasso) и L2 (ridge). Регуляризация — это метод, который может сделать некорректно поставленную проблему более разрешимой. Он задает ограничения, которые предоставляют сведения, дополняющие данные, и предотвращающие лжевзаимосвязи путем накладывания штрафов на модели с экстремальными значениями коэффициентов. Такой подход позволяет улучшить обобщение модели, реализованное с помощью выбора оптимальной сложности в компромиссной частоте исключений. Регуляризация предполагает добавление штрафа, связанного со значениями коэффициентов, к погрешности гипотезы. К точной модели с предельными коэффициентами будет применен больший штраф. При этом для менее точной модели с более приемлемыми значениями штраф будет меньше. Регуляризации L1 и L2 дают разные результаты и сценарии использования. В некоторых аспектах они дополняют друг друга.

  • l1_weight: можно применять к разреженным моделям при работе с многомерными данными. При этом извлекаются небольшие признаки, связанные с весовыми коэффициентами, которые относительно маловажны по отношению к 0.

  • l2_weight: предпочтительно используется для данных без разреженности. При этом извлекаются крупные весовые коэффициенты к нулю.

Добавление штрафа хребта к регуляризации преодолевает некоторые ограничения лассо. Это позволяет повысить точность прогнозирования, например в тех случаях, когда число предикторов больше размера выборки. Если x = l1_weight и y = l2_weight, ax + by = c определяет линейный диапазон членов регуляризации. Значения x и y по умолчанию: 1. Агрессивная регуляризация может ухудшить возможности прогнозирования из-за исключения из модели важных переменных. Поэтому выбор оптимальных значений параметров регуляризации важен для производительности модели логистической регрессии.

Аргументы

formula

Формула, описанная в членах взаимодействия revoscalepy.rx_formula, и F() сейчас не поддерживаются в microsoftml.

.

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

method

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

l2_weight

Весовой коэффициент регуляризации L2. Его значение должно быть больше или равно 0, а по умолчанию задано значение 1.

l1_weight

Весовой коэффициент регуляризации L1. Его значение должно быть больше или равно 0, а по умолчанию задано значение 1.

opt_tol

Пороговое значение для схождения оптимизатора. Если улучшение между итерациями меньше, чем пороговое значение, алгоритм прекращает работу и возвращает текущую модель. Чем меньше значение, тем алгоритм медленнее, но точнее. Значение по умолчанию — 1e-07.

memory_size

Размер памяти для алгоритма L-BFGS, указывающий число сохраняемых последних позиций и градиентов для вычисления следующего шага. Этот параметр оптимизации ограничивает объем памяти, используемый для вычисления величины и направления следующего шага. Если указано меньшее количество памяти, обучение проходит быстрее, но является менее точным. Значение должно быть больше или равно 1. Значение по умолчанию — 20.

max_iterations

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

show_training_stats

Укажите True, чтобы отображать статистику по данным обучения и обученной модели. Если это не нужно, задайте False. Значение по умолчанию — False. Дополнительные сведения о статистике модели см. в статье, посвященной summary.ml_model().

sgd_init_tol

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

init_wts_diameter

Задает диаметр начальных весовых коэффициентов, который определяет диапазон, из которого берутся значения для первоначальных весовых коэффициентов. Такие весовые коэффициенты инициализируются случайным образом из этого диапазона. Например, если задан диаметр d, весовые коэффициенты равномерно распределяются между -d/2 и d/2. Значение по умолчанию — 0; оно указывает, что все веса инициализируются со значением 0.

train_threads

Число потоков для использования при обучении модели. Должно быть равно числу ядер на компьютере. Обратите внимание, что многопоточный алгоритм L-BFGS пытается загрузить набор данных в память. При возникновении проблем с нехваткой памяти задайте для train_threads значение 1, чтобы отключить многопоточность. Если указано значение None, число используемых потоков будет определяться внутренне. Значение по умолчанию — None.

dense_optimizer

Если значение равно True, включается принудительное уплотнение внутренних векторов оптимизации. Если значение равно False, оптимизатор логистической регрессии может при необходимости использовать разреженные или уплотненные внутренние состояния. Если для denseOptimizer задать значение True, внутреннему оптимизатору потребуется использовать уплотненное внутреннее состояние, что может снизить нагрузку на сборщик мусора при решении более крупных проблем.

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

Параметры управления для сборки.

Возвращаемое значение

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

Примечание

Этот алгоритм всегда будет пытаться загрузить весь набор данных в память, если train_threads > 1 (многопоточность включена).

См. также

rx_predict

Ссылки

Википедия: L-BFGS (на английском языке)

Википедия: логистическая регрессия (статья на английском языке)

Scalable Training of L1-Regularized Log-Linear Models (Масштабируемое обучение для регулязированных по L1 логлинейных моделей)

Test Run - L1 and L2 Regularization for Machine Learning (Тестовый запуск — регуляризация L1 и L2 для Машинного обучения)

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

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, 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)

model = rx_logistic_regression(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(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.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 6
improvement criterion: Mean Improvement
L1 regularization selected 5 of 6 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0646405
Elapsed time: 00:00:00.0083991
OrderedDict([('(Bias)', -1.2366217374801636), ('spontaneous', 1.9391206502914429), ('induced', 0.7497404217720032), ('parity', -0.31517016887664795), ('age', -3.162723260174971e-06)])
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0287290
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
  isCase PredictedLabel     Score  Probability
0  False          False -1.341681     0.207234
1   True           True  0.597440     0.645070
2  False           True  0.544912     0.632954
3  False          False -1.289152     0.215996
4  False          False -1.019339     0.265156

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

'''
MultiClass Classification
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

iris = get_dataset("iris")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

irisdf = iris.as_df()
irisdf["Species"] = irisdf["Species"].astype("category")
data_train, data_test, y_train, y_test = train_test_split(irisdf, irisdf.Species)

model = rx_logistic_regression(
    formula="  Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width ",
    method="multiClass",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["Species", "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: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 15
improvement criterion: Mean Improvement
L1 regularization selected 9 of 15 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0493224
Elapsed time: 00:00:00.0080558
OrderedDict([('setosa+(Bias)', 2.074636697769165), ('versicolor+(Bias)', 0.4899507164955139), ('virginica+(Bias)', -2.564580202102661), ('setosa+Petal_Width', -2.8389241695404053), ('setosa+Petal_Length', -2.4824044704437256), ('setosa+Sepal_Width', 0.274869441986084), ('versicolor+Sepal_Width', -0.2645561397075653), ('virginica+Petal_Width', 2.6924400329589844), ('virginica+Petal_Length', 1.5976412296295166)])
Beginning processing data.
Rows Read: 38, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0331861
Finished writing 38 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
      Species   Score.0   Score.1   Score.2
0   virginica  0.044230  0.364927  0.590843
1      setosa  0.767412  0.210586  0.022002
2      setosa  0.756523  0.221933  0.021543
3      setosa  0.767652  0.211191  0.021157
4  versicolor  0.116369  0.498615  0.385016