microsoftml.rx_oneclass_svm: Anomalieerkennung

Verwendung

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)

BESCHREIBUNG

Machine Learning: einklassige SVM (Support Vector Machines)

Details

Einklassige SVM ist ein Algorithmus zur Anomalieerkennung. Ziel der Anomalieerkennung ist es, Ausreißer zu ermitteln, die nicht zu einer bestimmten Zielklasse gehören. Dieser SVM-Typ ist einklassig, da das Trainingsdataset nur Beispiele aus der Zielklasse enthält. Er leitet daraus ab, welche Eigenschaften für die Objekte der Zielklasse normal sind, und sagt anhand dieser Eigenschaften voraus, welche Beispiele sich von den normalen Beispielen unterscheiden. Dies ist für die Erkennung von Anomalien nützlich, da die Knappheit von Trainingsbeispielen das entscheidende Merkmal von Anomalien ist. In der Regel gibt es nur sehr wenige Beispiele für das Eindringen in ein Netzwerk, Betrug oder andere Arten anormalen Verhaltens.

Argumente

Formel

Die Formel, wie in „revoscalepy.rx_formula“ beschrieben. Interaktionsterme und F() werden derzeit in microsoftml nicht unterstützt.

data

Ein Datenquellenobjekt oder eine Zeichenfolge, die eine \ .xdf-Datei oder ein Datenrahmenobjekt angibt.

cache_size

Die maximale Größe in MB des Caches, in dem die Trainingsdaten gespeichert werden. Erhöhen Sie diesen Wert für große Trainingsdatasets. Der Standardwert ist 100 MB.

kernel

Eine Zeichenfolge, die den Kernel darstellt, der zum Berechnen innerer Produkte verwendet wird. Weitere Informationen finden Sie unter ma_kernel(). Die folgenden Optionen sind verfügbar:

  • rbf_kernel: Radialer Basisfunktionskernel. Dessen Parameter steht für gamma im Term exp(-gamma|x-y|^2. Falls nicht angegeben, ist der Standardwert 1 dividiert durch die Anzahl der verwendeten Features. Beispiel: rbf_kernel(gamma = .1). Dies ist der Standardwert.

  • linear_kernel: linearer Kernel.

  • polynomial_kernel: Polynomkernel mit den Parameternamen a, bias und deg im Term (a*<x,y> + bias)^deg. bias, der Standardwert ist 0. Der Grad, deg, ist standardmäßig 3. Wenn a nicht angegeben ist, wird der Wert auf 1 dividiert durch die Anzahl der Features festgelegt.

  • sigmoid_kernel: Sigmoidkernel mit Parameternamen gamma und coef0 im Term tanh(gamma*<x,y> + coef0). gamma, Standardwert 1 dividiert durch die Anzahl der Features. Dieser Parameter coef0 hat den Standardwert 0. Beispiel: sigmoid_kernel(gamma = .1, coef0 = 0).

epsilon

Der Schwellenwert für Optimierungskonvergenz. Wenn die Verbesserung zwischen Iterationen kleiner als der Schwellenwert ist, wird der Algorithmus beendet und das aktuelle Modell zurückgegeben. Der Wert muss größer oder gleich numpy.finfo(double).eps sein. Der Standardwert ist 0,001.

nu

Der Kompromiss zwischen dem Anteil der Ausreißer und der Anzahl der Stützvektoren (dargestellt durch den griechischen Buchstaben nu). Muss zwischen 0 und 1 liegen, in der Regel zwischen 0,1 und 0,5. Der Standardwert ist 0,1.

shrink

Verwendet, falls True, die verkleinernde Heuristik. In diesem Fall werden einige Stichproben während des Trainingsverfahrens „verkleinert“, was das Training beschleunigen kann. Der Standardwert ist True.

normalize

Gibt den Typ der verwendeten automatischen Normalisierung an:

  • "Auto": Wenn eine Normalisierung erforderlich ist, erfolgt sie automatisch. Dies ist die Standardoption.

  • "No": Es erfolgt keine Normalisierung.

  • "Yes": Es erfolgt eine Normalisierung.

  • "Warn": Wenn eine Normalisierung erforderlich ist, wird eine Warnmeldung angezeigt, ohne dass die Normalisierung erfolgt.

Bei der Normalisierung werden unterschiedliche Datenbereiche anhand einer Standardskala neu skaliert. Die Featureskalierung stellt sicher, dass die Abstände zwischen den Datenpunkten proportional sind und ermöglicht verschiedene Optimierungsmethoden wie den Gradientenabstieg, um wesentlich schneller zu konvergieren. Wenn eine Normalisierung erfolgt, wird die Normalisierungsfunktion MaxMin verwendet. Sie normalisiert Werte im Intervall [a, b], wobei gilt: -1 <= a <= 0 und 0 <= b <= 1 und b - a = 1. Diese Normalisierungsfunktion behält geringe Datendichte bei, indem 0 zu 0 zugeordnet wird.

ml_transforms

Gibt eine Liste von MicrosoftML-Transformationen an, die vor dem Training für die Daten erfolgen sollen, oder None, wenn keine Transformationen erfolgen sollen. Unter featurize_text, categorical und categorical_hash finden Sie unterstützte Transformationen. Diese Transformationen werden nach allen angegebenen Python-Transformationen ausgeführt. Der Standardwert ist None.

ml_transform_vars

Gibt einen Zeichenvektor von Variablennamen an, die in ml_transforms verwendet werden sollen, oder None, wenn keine verwendet werden sollen. Der Standardwert ist None.

row_selection

Nicht unterstützt. Gibt die Zeilen (Beobachtungen) aus dem Dataset an, die vom Modell verwendet werden sollen, mit dem Namen einer logischen Variablen aus dem Dataset (in Anführungszeichen) oder mit einem logischen Ausdruck unter Verwendung von Variablen im Dataset. Beispiel:

  • row_selection = "old" verwendet nur Beobachtungen, bei denen True der Wert der Variablen old ist.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) verwendet nur Beobachtungen, bei denen der Wert der Variablen age zwischen 20 und 65 liegt und der Wert von log der Variablen income größer als 10 ist.

Die Zeilenauswahl erfolgt nach der Verarbeitung von Datentransformationen (siehe die Argumente transforms oder transform_function). Wie bei allen Ausdrücken kann row_selection außerhalb des Funktionsaufrufs mit der Funktion expression definiert werden.

Transformationen

Nicht unterstützt. Ein Ausdruck der Form, die die erste Runde der Variablentransformationen darstellt. Wie bei allen Ausdrücken kann transforms (oder row_selection) außerhalb des Funktionsaufrufs mit der Funktion expression definiert werden.

transform_objects

Nicht unterstützt. Eine benannte Liste, die Objekte enthält, auf die mit transforms, transform_function und row_selection verwiesen werden kann.

transform_function

Die Variablentransformationsfunktionen.

transform_variables

Ein Zeichenvektor von Eingabedatasetvariablen, die für die Transformationsfunktion erforderlich sind.

transform_packages

Nicht unterstützt. Ein Zeichenvektor, der zusätzliche Python-Pakete (außerhalb der in RxOptions.get_option("transform_packages") angegebenen) angibt, die für die Verwendung in Variablentransformationsfunktionen verfügbar gemacht und im Voraus geladen werden sollen. Zum Beispiel solche, die explizit in revoscalepy-Funktionen über ihre Argumente transforms und transform_function definiert sind oder solche, die implizit über ihre Argumente formula oder row_selection definiert sind. Das Argument transform_packages kann auch None lauten, was angibt, dass keine Pakete außerhalb von RxOptions.get_option("transform_packages") im Voraus geladen werden.

transform_environment

Nicht unterstützt. Eine benutzerdefinierte Umgebung, die als übergeordnete Umgebung für alle intern entwickelten Umgebungen dient und für die Transformation von Variablendaten verwendet wird. Falls transform_environment = None, wird stattdessen eine neue „hash“-Umgebung mit der übergeordneten „revoscalepy.baseenv“ verwendet.

blocks_per_read

Gibt die Anzahl der Blöcke an, die für jeden Datenblock gelesen werden, der aus der Datenquelle gelesen wird.

report_progress

Ein ganzzahliger Wert, der die Berichtsebene für den Status der Zeilenverarbeitung angibt:

  • 0: Es wird kein Status gemeldet.

  • 1: Die Anzahl der verarbeiteten Zeilen wird ausgegeben und aktualisiert.

  • 2: Verarbeitete Zeilen und Zeitsteuerungen werden gemeldet.

  • 3: Verarbeitete Zeilen und alle Zeitsteuerungen werden gemeldet.

Ausführlich

Ein ganzzahliger Wert, der die gewünschte Ausgabemenge angibt. Falls 0, erfolgt während der Berechnungen keine ausführliche Ausgabe. Ganzzahlige Werte von 1 bis 4 liefern zunehmend mehr Informationen.

compute_context

Legt den Kontext fest, in dem Berechnungen erfolgen, angegeben mit einer gültigen Angabe für revoscalepy.RxComputeContext. Derzeit werden lokale und revoscalepy.RxInSqlServer-Computekontexte unterstützt.

ensemble

Steuerungsparameter für die Bildung von Ensembles.

Gibt zurück

Ein OneClassSvm-Objekt mit dem trainierten Modell.

Hinweis

Dieser Algorithmus ist ein Singlethread-Algorithmus, der immer versucht, das gesamte Dataset in den Arbeitsspeicher zu laden.

Siehe auch

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

Referenzen

Wikipedia: Anomalieerkennung

Microsoft Azure Machine Learning Studio (klassisch): einklassige SVM (Support Vector Machine)

Estimating the Support of a High-Dimensional Distribution (Schätzen der Unterstützung einer hochdimensionalen Verteilung)

New Support Vector Algorithms (Neue Stützvektoralgorithmen)

LIBSVM: eine Bibliothek für Support Vector Machines

Beispiel

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

Ausgabe:

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