Бөлісу құралы:


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

Usage

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)

Description

Логистическая регрессия машинного обучения

Сведения

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

Метод оптимизации используется rx_logistic_regression для ограниченной памяти Broyden-Fletcher-Goldfarb-Shanno (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. Агрессивная нормализация может повредить прогнозной емкости, исключив важные переменные из модели. Поэтому выбор оптимальных значений параметров нормализации важен для производительности модели логистической регрессии.

Arguments

формула

Формула, как описано в 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, чтобы использовать стохастический градиентный градиентный спуск (JSON). Набор значений, отличный от нуля, указывает допустимое значение, используемое ДЛЯ определения конвергенции. Значение 0 по умолчанию указывает, что СЛУЖБА УПРАВЛЕНИЯ НЕ используется.

init_wts_diameter

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

train_threads

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

dense_optimizer

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

Нормализации

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

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

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

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

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

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

Возвраты

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

Замечание

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

См. также

rx_predict

Ссылки

Википедия: L-BFGS

Википедия: логистическая регрессия

Масштабируемое обучение моделей L1-Regularized Log-Linear

Тестовое выполнение — нормализация 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