Поделиться через


microsoftml.rx_oneclass_svm: обнаружение аномалий

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

microsoftml.rx_oneclass_svm(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], cache_size: float = 100,
    kernel: [<function linear_kernel at 0x0000007156EAC8C8>,
    <function polynomial_kernel at 0x0000007156EAC950>,
    <function rbf_kernel at 0x0000007156EAC7B8>,
    <function sigmoid_kernel at 0x0000007156EACA60>] = {'Name': 'RbfKernel',
    'Settings': {}}, epsilon: float = 0.001, nu: float = 0.1,
    shrink: bool = True, 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)

Описание

Одноклассовый метод опорных векторов в Машинном обучении

Сведения

Одноклассовый метод опорных векторов — это алгоритм для обнаружения аномалий. Цель обнаружения аномалий заключается в выявлении выбросов, не относящихся к какому-либо целевому классу. Такой тип метода опорных векторов использует только один класс, так как набор обучения содержит только примеры из целевого класса. Он выводит, какие свойства являются нормальными для объекта в целевом классе, а затем на основе таких свойств прогнозирует, какие примеры отличаются от нормальных примеров. Это полезно для обнаружения аномалий, так как нехватка примеров для обучения является неотъемлемым свойством аномалий — обычно доступно очень мало примеров вторжений в сеть, мошенничества и других типов аномального поведения.

Аргументы

formula

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

.

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

cache_size

Максимальный размер кэша (в МБ), который хранит данные обучения. Увеличьте это значение для крупных наборов обучения. Значение по умолчанию — 100 МБ.

ядро

Строка символов, представляющая ядро, которое используется для вычисления внутренних продуктов. Дополнительные сведения см. в разделе ma_kernel(). Доступны следующие варианты:

  • rbf_kernel: ядро радиальной базисной функции. Ее параметр представляет gamma в члене exp(-gamma|x-y|^2. Если он не указан, по умолчанию принимается значение 1, разделенное на число используемых признаков. Например, rbf_kernel(gamma = .1). Это значение по умолчанию.

  • linear_kernel: линейное ядро.

  • polynomial_kernel: полиномиальное ядро с именами параметров a, bias и deg в члене (a*<x,y> + bias)^deg. bias, по умолчанию принимает значение 0. Степень, deg, по умолчанию принимает значение 3. Если a не указано, задается значение 1, разделенное на число признаков.

  • sigmoid_kernel: сигмоидальное ядро с именами параметров gamma и coef0 в члене tanh(gamma*<x,y> + coef0). gamma, по умолчанию используется значение 1, разделенное на число признаков. Параметр coef0 по умолчанию принимает значение 0. Например, sigmoid_kernel(gamma = .1, coef0 = 0).

epsilon

Пороговое значение для схождения оптимизатора. Если улучшение между итерациями меньше, чем пороговое значение, алгоритм прекращает работу и возвращает текущую модель. Это значение должно быть больше или равно numpy.finfo(double).eps. Значение по умолчанию — 0,001.

nu

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

shrink

Если True, используется сжимающая эвристика. В этом случае некоторые примеры будут "сжаты" во время процедуры обучения, что может ускорить его. Значение по умолчанию — 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

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

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

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

Примечание

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

См. также

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

Ссылки

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

Microsoft Azure Machine Learning Studio (classic): One-Class Support Vector Machine (Студия Машинного обучения Microsoft Azure (классическая) — одноклассовый метод опорных векторов)

Estimating the Support of a High-Dimensional Distribution (Оценка поддержки многомерного распределения)

New Support Vector Algorithms (Новые алгоритмы для работы с опорными векторами)

LIBSVM: A Library for Support Vector Machines (LIBSVM — библиотека для метода опорных векторов)

Пример

'''
Anomaly Detection.
'''
import numpy
import pandas
from microsoftml import rx_oneclass_svm, 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()
data_train, data_test = train_test_split(irisdf)

# Estimate a One-Class SVM model
model = rx_oneclass_svm(
            formula= "~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width",
            data=data_train)

# Add additional non-iris data to the test data set
data_test["isIris"] = 1.0
not_iris = pandas.DataFrame(data=dict(Sepal_Length=[2.5, 2.6], 
        Sepal_Width=[.75, .9], Petal_Length=[2.5, 2.5], 
        Petal_Width=[.8, .7], Species=["not iris", "not iris"], 
        isIris=[0., 0.]))

merged_test = pandas.concat([data_test, not_iris])

scoresdf = rx_predict(model, data=merged_test, extra_vars_to_write=["isIris"])

# Look at the last few observations
print(scoresdf.tail())

Выходные данные:

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.
Using these libsvm parameters: svm_type=2, nu=0.1, cache_size=100, eps=0.001, shrinking=1, kernel_type=2, gamma=0.25, degree=0, coef0=0
Reconstructed gradient.
optimization finished, #iter = 15
obj = 52.905421, rho = 9.506052
nSV = 12, nBSV = 9
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0555122
Elapsed time: 00:00:00.0212389
Beginning processing data.
Rows Read: 40, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0349974
Finished writing 40 rows.
Writing completed.
    isIris     Score
35     1.0 -0.142141
36     1.0 -0.531449
37     1.0 -0.189874
38     0.0  0.635845
39     0.0  0.555602