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
.
Ссылки
Википедия: обнаружение аномалий (статья на английском языке)
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