Partekatu bidez


microsoftml.rx_oneclass_svm: Detección de anomalías

Usage

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)

Description

Machine Learning One Class Support Vector Machines

Detalles

SVM de una clase 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 alguna clase de destino. Este tipo de SVM es 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 de estas propiedades predice qué ejemplos son a diferencia de los ejemplos normales. Esto es útil para la detección de anomalías porque la escasez de ejemplos de entrenamiento es el carácter de definición de anomalías: normalmente hay muy pocos ejemplos de intrusión de red, fraude u otros tipos de comportamiento anómalo.

Arguments

formula

Fórmula tal como se describe en revoscalepy.rx_formula. Los términos de interacción y F() no se admiten actualmente 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 esto para grandes conjuntos de entrenamiento. El valor predeterminado es 100 MB.

núcleo

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

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

  • linear_kernel: kernel lineal.

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

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

épsilon

Umbral para la convergencia del optimizador. Si la mejora entre 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

El equilibrio entre la fracción de valores atípicos y el número de vectores de soporte (representados por la letra griega nu). Debe estar comprendido entre 0 y 1, normalmente entre 0,1 y 0,5. El valor predeterminado es 0,1.

shrink

Usa la heurística de reducción si True. En este caso, algunas muestras se "reducirán" durante el procedimiento de entrenamiento, lo que puede acelerar el entrenamiento. El valor predeterminado es True.

normalizar

Especifica el tipo de normalización automática usada:

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

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

  • "Yes": se realiza la normalización.

  • "Warn": si se necesita normalización, se muestra un mensaje de advertencia, pero no se realiza la normalización.

La normalización vuelve a escalar intervalos de datos dispares a una escala estándar. El escalado de características garantiza que las distancias entre los puntos de datos son proporcionales y permite que varios métodos de optimización, como el descenso de degradado converjan mucho más rápido. Si se realiza la normalización, se usa un MaxMin normalizador. Normaliza los valores de un intervalo [a, b] donde -1 <= a <= 0 y 0 <= b <= 1 .b - a = 1 Este normalizador conserva la dispersidad asignando cero a cero.

ml_transforms

Especifica una lista de transformaciones de MicrosoftML que se van a realizar en los datos antes del entrenamiento o None si no se va a realizar ninguna transformación. Consulte featurize_text, categoricaly categorical_hash, para ver las transformaciones admitidas. Estas transformaciones se realizan después de las transformaciones de Python especificadas. El valor predeterminado es None.

ml_transform_vars

Especifica un vector de caracteres de nombres de variable que se van a usar en ml_transforms o Ninguno si no se va a usar ninguno. El valor predeterminado es None.

row_selection

NO SE ADMITE. Especifica las filas (observaciones) del conjunto de datos que va a usar el modelo con el nombre de una variable lógica del conjunto de datos (entre comillas) o con una expresión lógica mediante variables del conjunto de datos. Por ejemplo:

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

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

La selección de filas 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 expression función .

Transforma

NO SE ADMITE. 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 expression función .

transform_objects

NO SE ADMITE. Lista con nombre que contiene objetos a los que puede hacer referencia transforms, transform_functiony 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 SE ADMITE. Vector de caracteres que especifica paquetes adicionales de Python (fuera de los especificados en RxOptions.get_option("transform_packages")) que se van a poner a disposición y cargar previamente para su uso en las funciones de transformación de variables. Por ejemplo, los definidos explícitamente en funciones de revoscalepy a través de sus transforms argumentos y transform_function o los definidos implícitamente a través de sus formula argumentos o row_selection . El transform_packages argumento también puede ser None, lo que indica que no hay paquetes externos RxOptions.get_option("transform_packages") cargados previamente.

transform_environment

NO SE ADMITE. Un entorno definido por el usuario que sirve como elemento primario para todos los entornos desarrollados internamente y se usa para la transformación de datos variables. Si transform_environment = Nonees , se usa en su lugar un nuevo entorno "hash" con revoscalepy.baseenv primario.

blocks_per_read

Especifica el número de bloques que se van a leer para cada fragmento de datos leídos desde el origen de datos.

report_progress

Valor entero que especifica el nivel de informes sobre el progreso del procesamiento de filas:

  • 0: no se notifica ningún progreso.

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

  • 2: se notifican filas procesadas y tiempos.

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

verbose

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

compute_context

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

conjunto

Parámetros de control para el montaje.

Devoluciones

Objeto OneClassSvm con el modelo entrenado.

Nota:

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

Consulte 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): One-Class máquina de vectores de soporte técnico

Estimación del soporte de una distribución de High-Dimensional

Nuevos algoritmos de vectores de compatibilidad

LIBSVM: una biblioteca para máquinas vectoriales de soporte técnico

Example

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