Compartir a través de


microsoftml.rx_oneclass_svm: detección de anomalías

Uso

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)

Descripción

Máquinas de vectores de soporte de una clase para el aprendizaje automático

Detalles

One-class SVM es un algoritmo para la detección de anomalías. El objetivo de la detección de anomalías es identificar valores atípicos que no pertenecen a ninguna clase de destino. Este tipo de SVM es de una clase porque el conjunto de entrenamiento contiene solo ejemplos de la clase de destino. Deduce qué propiedades son normales para los objetos de la clase de destino y, a partir de estas propiedades, predice qué ejemplos son diferentes de los ejemplos normales. Esto es útil para la detección de anomalías porque la escasez de ejemplos de entrenamiento es lo que caracteriza a las anomalías. Normalmente, hay muy pocos ejemplos de intrusiones de red, fraudes u otros tipos de comportamiento anómalo.

Argumentos

formula

Fórmula tal como se describe en revoscalepy.rx_formula. Los términos de interacción y F() actualmente no se admiten en microsoftml.

datos

Objeto de origen de datos o cadena de caracteres que especifica un archivo .xdf o un objeto de trama de datos.

cache_size

Tamaño máximo en MB de la memoria caché que almacena los datos de entrenamiento. Aumente este valor para los conjuntos de entrenamiento de gran tamaño. El valor predeterminado es 100 MB.

kernel

Cadena de caracteres que representa el kernel utilizado para calcular productos internos. Para obtener más información, vea ma_kernel(). Están disponibles las siguientes opciones:

  • rbf_kernel: kernel de función de base radial. Este parámetro representa gamma en el término exp(-gamma|x-y|^2. Si no se especifica, el valor predeterminado es 1 dividido por el número de características usadas. Por ejemplo, rbf_kernel(gamma = .1). Este es el valor predeterminado.

  • linear_kernel: kernel lineal.

  • polynomial_kernel: kernel polinómico con los nombres de parámetro a, bias y deg en el término (a*<x,y> + bias)^deg. El valor predeterminado de bias es 0. El valor predeterminado de deg (grado) es 3. Si no se especifica a, se establece en 1 dividido por el número de características.

  • sigmoid_kernel: kernel sigmoide con los nombres de parámetro gamma y coef0 en el término tanh(gamma*<x,y> + coef0). El valor predeterminado de gamma es 1 dividido por el número de características. El valor predeterminado de coef0 es 0. Por ejemplo, sigmoid_kernel(gamma = .1, coef0 = 0).

epsilon

Umbral de convergencia del optimizador. Si la mejora entre las iteraciones es menor que el umbral, el algoritmo se detiene y devuelve el modelo actual. El valor debe ser mayor o igual que numpy.finfo(double).eps. El valor predeterminado es 0.001.

nu

Equilibrio entre la fracción de los valores atípicos y el número de vectores de soporte (representado por la letra griega nu). Debe estar entre 0 y 1; normalmente, entre 0.1 y 0.5. El valor predeterminado es 0.1.

shrink

Usa heurística de reducción si es True. En este caso, algunos ejemplos se "reducen" durante el entrenamiento, lo que puede acelerar el procedimiento. El valor predeterminado es True.

normalize

Especifica el tipo de normalización automática que se usa:

  • "Auto": si la normalización es necesaria, se realiza automáticamente. Esta es la opción predeterminada.

  • "No": no se realiza ninguna normalización.

  • "Yes": se lleva a cabo la normalización.

  • "Warn": si la normalización es necesaria, se muestra un mensaje de advertencia, pero no se lleva a cabo la normalización.

La normalización aplica una escala estándar a intervalos de datos dispares. El escalado de características asegura que las distancias entre los puntos de datos sean proporcionales y permite que varios métodos de optimización, como el descenso del gradiente, converjan mucho más rápido. Si se lleva a cabo la normalización, se usa un normalizador MaxMin. Normaliza los valores de un intervalo [a, b], donde -1 <= a <= 0, 0 <= b <= 1 y b - a = 1. Este normalizador mantiene la dispersión asignando cero a cero.

ml_transforms

Especifica una lista de transformaciones de MicrosoftML que deben realizarse en los datos antes del entrenamiento, o bien None si no hay que realizar ninguna transformación. Vea featurize_text, categorical y categorical_hash para saber las transformaciones que se admiten. Estas transformaciones se realizan después de cualquier transformación de Python especificada. El valor predeterminado es None.

ml_transform_vars

Especifica un vector de caracteres de nombres de variable que deben usarse en ml_transforms, o bien None si no hay que usar ninguno. El valor predeterminado es None.

row_selection

NO ADMITIDO. Especifica las filas (observaciones) del conjunto de datos que debe usar el modelo con el nombre de una variable lógica del conjunto de datos (entre comillas) o con una expresión lógica que usa variables en el conjunto de datos. Por ejemplo:

  • row_selection = "old" solo usará observaciones en las que el valor de la variable old sea True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) solo usa observaciones en las que el valor de la variable age está entre 20 y 65, y el valor de log de la variable income es mayor que 10.

La selección de fila se realiza después de procesar las transformaciones de datos (vea los argumentos transforms o transform_function). Al igual que con todas las expresiones, row_selection se puede definir fuera de la llamada de función mediante la función expression.

transformaciones

NO ADMITIDO. Expresión del formulario que representa la primera ronda de transformaciones de variables. Al igual que con todas las expresiones, transforms (o row_selection) se puede definir fuera de la llamada de función mediante la función expression.

transform_objects

NO ADMITIDO. Lista con nombre que contiene objetos a los que pueden hacer referencia transforms, transform_function y row_selection.

transform_function

Función de transformación de variables.

transform_variables

Vector de caracteres de variables del conjunto de datos de entrada necesarias para la función de transformación.

transform_packages

NO ADMITIDO. Vector de caracteres que especifica paquetes de Python adicionales (aparte de los especificados en RxOptions.get_option("transform_packages")) que deben cargarse previamente y estar disponibles para usarlos en las funciones de transformación de variables. Por ejemplo, los definidos explícitamente en las funciones de revoscalepy mediante los argumentos transforms y transform_function, o los definidos implícitamente con los argumentos formula y row_selection. El argumento transform_packages también puede ser None, que indica que no se cargan previamente más paquetes aparte de los de RxOptions.get_option("transform_packages").

transform_environment

NO ADMITIDO. Entorno definido por el usuario que sirve como primario de todos los entornos desarrollados internamente y que se usa para la transformación de datos variables. Si es transform_environment = None, se usa un nuevo entorno "hash" con revoscalepy.baseenv como primario.

blocks_per_read

Especifica el número de bloques que se leerán para cada fragmento de datos leídos del origen de datos.

report_progress

Valor entero que especifica el nivel de notificación del progreso del procesamiento de filas:

  • 0: no se notifica el progreso.

  • 1: se imprime y actualiza el número de filas procesadas.

  • 2: se notifican las filas procesadas y los intervalos.

  • 3: se notifican las filas procesadas y todos los intervalos.

verbose

Valor entero que especifica la cantidad de salida deseada. Si es 0, no se imprime ninguna salida detallada durante los cálculos. Los valores enteros de 1 a 4 proporcionan cantidades crecientes de información.

compute_context

Establece el contexto en el que se ejecutan los cálculos, especificado con revoscalepy.RxComputeContext. Actualmente, se admiten los contextos de proceso local y revoscalepy.RxInSqlServer.

ensemble

Parámetros de control para la formación de conjuntos.

Devoluciones

Objeto OneClassSvm con el modelo entrenado.

Nota

Este algoritmo es uniproceso y siempre intentará cargar todo el conjunto de datos en la memoria.

Vea también

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

Referencias

Wikipedia: Detección de anomalías

Microsoft Azure Machine Learning Studio (clásico): Máquina de vectores de soporte de una clase

Estimación de la compatibilidad de una distribución altamente dimensional

Nuevos algoritmos de vector de soporte

LIBSVM: una biblioteca para máquinas de vectores de soporte

Ejemplo

'''
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())

Salida:

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