Delen via


microsoftml.rx_oneclass_svm: Anomaliedetectie

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

Bijzonderheden

SVM van één klasse is een algoritme voor anomaliedetectie. Het doel van anomaliedetectie is het identificeren van uitbijters die niet tot een bepaalde doelklasse behoren. Dit type SVM is één klasse omdat de trainingsset alleen voorbeelden van de doelklasse bevat. Hiermee wordt afgeleid welke eigenschappen normaal zijn voor de objecten in de doelklasse en uit deze eigenschappen wordt voorspeld welke voorbeelden in tegenstelling tot de normale voorbeelden zijn. Dit is handig voor anomaliedetectie omdat de tekorten van trainingsvoorbeelden het definiërende karakter van afwijkingen zijn: meestal zijn er zeer weinig voorbeelden van netwerkinbraak, fraude of andere soorten afwijkend gedrag.

Arguments

formule

De formule zoals beschreven in revoscalepy.rx_formula. Interactietermen en F() worden momenteel niet ondersteund in microsoftml.

gegevens

Een gegevensbronobject of een tekenreeks die een .xdf-bestand of een gegevensframeobject opgeeft.

cache_size

De maximale grootte in MB van de cache waarin de trainingsgegevens worden opgeslagen. Verhoog dit voor grote trainingssets. De standaardwaarde is 100 MB.

kern

Een tekenreeks die de kernel vertegenwoordigt die wordt gebruikt voor het berekenen van interne producten. Zie ma_kernel() voor meer informatie. De volgende opties zijn beschikbaar:

  • rbf_kernel: Radiale basisfunctie kernel. De parameter vertegenwoordigtgamma in de term exp(-gamma|x-y|^2. Als dit niet is opgegeven, wordt deze standaard 1 gedeeld door het aantal gebruikte functies. Bijvoorbeeld: rbf_kernel(gamma = .1). Dit is de standaardwaarde.

  • linear_kernel: Lineaire kernel.

  • polynomial_kernel: Polynomiale kernel met parameternamen a, biasen deg in de term (a*<x,y> + bias)^deg. De biasstandaardwaarde is 0. De graad, degstandaard ingesteld op 3. Als a dit niet is opgegeven, wordt deze ingesteld op 1 gedeeld door het aantal functies.

  • sigmoid_kernel: Sigmoid kernel met parameternamen gamma en coef0 in de term tanh(gamma*<x,y> + coef0). gamma, wordt 1 standaard gedeeld door het aantal functies. De parameter coef0 wordt standaard ingesteld op 0. Bijvoorbeeld: sigmoid_kernel(gamma = .1, coef0 = 0).

Epsilon

De drempelwaarde voor de convergentie van de optimizer. Als de verbetering tussen iteraties kleiner is dan de drempelwaarde, stopt het algoritme en retourneert het huidige model. De waarde moet groter dan of gelijk aan numpy.finfo(double).epszijn. De standaardwaarde is 0,001.

nu

De afweging tussen de fractie van uitbijters en het aantal steunvectoren (vertegenwoordigd door de Griekse letter nu). Moet tussen 0 en 1 zijn, meestal tussen 0,1 en 0,5. De standaardwaarde is 0,1.

shrink

Maakt gebruik van de verkleinende heuristiek als True. In dit geval zullen sommige steekproeven tijdens de trainingsprocedure worden "verkleind", waardoor de training kan worden versneld. De standaardwaarde is True.

Normalize

Hiermee geeft u het type automatische normalisatie gebruikt:

  • "Auto": als normalisatie nodig is, wordt deze automatisch uitgevoerd. Dit is de standaardoptie.

  • "No": er wordt geen normalisatie uitgevoerd.

  • "Yes": normalisatie wordt uitgevoerd.

  • "Warn": als normalisatie nodig is, wordt er een waarschuwingsbericht weergegeven, maar wordt er geen normalisatie uitgevoerd.

Normalisatie schaalt verschillende gegevensbereiken opnieuw op een standaardschaal. Door het schalen van functies worden de afstanden tussen gegevenspunten proportioneel en kunnen verschillende optimalisatiemethoden, zoals gradiëntafname, veel sneller worden geconvergeerd. Als normalisatie wordt uitgevoerd, wordt een MaxMin normalizer gebruikt. Het normaliseert waarden in een interval [a, b] waar -1 <= a <= 0 en 0 <= b <= 1 .b - a = 1 Deze normalizer behoudt spaarzaamheid door nul aan nul toe te brengen.

ml_transforms

Hiermee geeft u een lijst op met MicrosoftML-transformaties die moeten worden uitgevoerd op de gegevens vóór de training of Geen als er geen transformaties moeten worden uitgevoerd. Zie featurize_text, categoricalen categorical_hash, voor transformaties die worden ondersteund. Deze transformaties worden uitgevoerd na opgegeven Python-transformaties. De standaardwaarde is None.

ml_transform_vars

Hiermee geeft u een tekenvector op van namen van variabelen die moeten worden gebruikt in ml_transforms of Geen als er geen moet worden gebruikt. De standaardwaarde is None.

row_selection

NIET ONDERSTEUND. Hiermee geeft u de rijen (waarnemingen) op uit de gegevensset die door het model moeten worden gebruikt met de naam van een logische variabele uit de gegevensset (tussen aanhalingstekens) of met een logische expressie met behulp van variabelen in de gegevensset. Voorbeeld:

  • row_selection = "old" gebruikt alleen waarnemingen waarin de waarde van de variabele old is True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) gebruikt alleen waarnemingen waarbij de waarde van de age variabele tussen 20 en 65 ligt en de waarde van de logincome variabele groter is dan 10.

De rijselectie wordt uitgevoerd na het verwerken van gegevenstransformaties (zie de argumenten transforms of transform_function). Net als bij alle expressies row_selection kunt u buiten de functieoproep definiëren met behulp van de expression functie.

Transformeert

NIET ONDERSTEUND. Een expressie van het formulier dat de eerste ronde van variabeletransformaties vertegenwoordigt. Net als bij alle expressies transforms kan (of row_selection) buiten de functie-aanroep worden gedefinieerd met behulp van de expression functie.

transform_objects

NIET ONDERSTEUND. Een benoemde lijst met objecten waarnaar kan worden verwezen door transforms, transform_functionen row_selection.

transform_function

De functie voor variabeletransformatie.

transform_variables

Een tekenvector van variabelen voor invoergegevenssets die nodig zijn voor de transformatiefunctie.

transform_packages

NIET ONDERSTEUND. Een tekenvector die extra Python-pakketten opgeeft (buiten de pakketten die zijn opgegeven in RxOptions.get_option("transform_packages")) die beschikbaar moeten worden gemaakt en vooraf moeten worden geladen voor gebruik in functies voor variabele transformatie. Bijvoorbeeld degenen die expliciet zijn gedefinieerd in revoscalepy-functies via hun transforms en transform_function argumenten of die impliciet zijn gedefinieerd via hun formula of row_selection argumenten. Het transform_packages argument kan ook Geen zijn, wat aangeeft dat er geen pakketten buiten RxOptions.get_option("transform_packages") zijn geladen.

transform_environment

NIET ONDERSTEUND. Een door de gebruiker gedefinieerde omgeving die als bovenliggend element fungeert voor alle omgevingen die intern zijn ontwikkeld en worden gebruikt voor variabele gegevenstransformatie. Als transform_environment = Nonein plaats daarvan een nieuwe hash-omgeving met bovenliggende revoscalepy.baseenv wordt gebruikt.

blocks_per_read

Hiermee geeft u het aantal blokken op dat moet worden gelezen voor elk segment gegevens dat uit de gegevensbron wordt gelezen.

report_progress

Een geheel getal dat het rapportageniveau voor de voortgang van de rijverwerking aangeeft:

  • 0: er wordt geen voortgang gerapporteerd.

  • 1: het aantal verwerkte rijen wordt afgedrukt en bijgewerkt.

  • 2: rijen verwerkt en tijdsinstellingen worden gerapporteerd.

  • 3: rijen verwerkt en alle tijdsinstellingen worden gerapporteerd.

verbose

Een geheel getal dat de gewenste hoeveelheid uitvoer aangeeft. Als 0er tijdens berekeningen geen uitgebreide uitvoer wordt afgedrukt. Gehele getallen van waaruit 14 grotere hoeveelheden informatie moeten worden opgegeven.

compute_context

Hiermee stelt u de context in waarin berekeningen worden uitgevoerd, opgegeven met een geldige revoscalepy. RxComputeContext. Momenteel lokaal en opnieuw schalen. RxInSqlServer-rekencontexten worden ondersteund.

Ensemble

Besturingsparameters voor het opgeven van overeenkomsten.

Retouren

Een OneClassSvm object met het getrainde model.

Opmerking

Dit algoritme is één threaded en probeert altijd de volledige gegevensset in het geheugen te laden.

Zie ook

linear_kernel, , polynomial_kernelrbf_kernel, , sigmoid_kernel, . rx_predict

References

Wikipedia: Anomaliedetectie

Microsoft Azure Machine Learning Studio (klassiek): One-Class Support Vector Machine

De ondersteuning van een High-Dimensional-distributie schatten

Nieuwe Support Vector-algoritmen

BIBLIOTHEKENVM: Een bibliotheek voor Support Vector Machines

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

Uitvoer:

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