Condividi tramite


microsoftml.rx_oneclass_svm: Rilevamento anomalie

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

Dettagli

SVM a una classe è un algoritmo per il rilevamento anomalie. L'obiettivo del rilevamento anomalie è identificare gli outlier che non appartengono a una classe di destinazione. Questo tipo di SVM è una classe perché il set di training contiene solo esempi della classe di destinazione. Deduce quali proprietà sono normali per gli oggetti nella classe di destinazione e da queste proprietà stima quali esempi sono diversi dagli esempi normali. Ciò è utile per il rilevamento anomalie perché la scarsità di esempi di training è il carattere di definizione delle anomalie: in genere sono presenti pochissimi esempi di intrusioni di rete, frodi o altri tipi di comportamento anomalo.

Arguments

formula

Formula come descritto in revoscalepy.rx_formula. Termini di interazione e F() non sono attualmente supportati in microsoftml.

data

Oggetto origine dati o stringa di caratteri che specifica un file con estensione xdf o un oggetto frame di dati.

cache_size

Dimensione massima in MB della cache in cui sono archiviati i dati di training. Aumenta questo valore per set di training di grandi dimensioni. Il valore predefinito è 100 MB.

chicco

Stringa di caratteri che rappresenta il kernel usato per il calcolo dei prodotti interni. Per altre informazioni, vedere ma_kernel(). Sono disponibili le opzioni seguenti:

  • rbf_kernel: kernel della funzione base radiale. Il relativo parametro rappresentagamma il termine exp(-gamma|x-y|^2. Se non specificato, per impostazione predefinita viene 1 diviso per il numero di funzionalità usate. Ad esempio: rbf_kernel(gamma = .1). Questo è il valore predefinito.

  • linear_kernel: kernel lineare.

  • polynomial_kernel: kernel polinomiale con nomi di aparametro , biase deg nel termine (a*<x,y> + bias)^deg. Il biasvalore predefinito è 0. Il grado, deg, per impostazione predefinita è 3. Se a non viene specificato, viene impostato su 1 diviso per il numero di funzionalità.

  • sigmoid_kernel: kernel Sigmoid con nomi di gamma parametro e coef0 nel termine tanh(gamma*<x,y> + coef0). gamma, per impostazione predefinita viene 1 diviso per il numero di funzionalità. Per impostazione predefinita, il parametro coef0 è 0. Ad esempio: sigmoid_kernel(gamma = .1, coef0 = 0).

Epsilon

Soglia per la convergenza dell'utilità di ottimizzazione. Se il miglioramento tra iterazioni è inferiore alla soglia, l'algoritmo si arresta e restituisce il modello corrente. Il valore deve essere maggiore o uguale a numpy.finfo(double).eps. Il valore predefinito è 0,001.

Nu

Il compromesso tra la frazione di outlier e il numero di vettori di supporto (rappresentati dalla lettera greca nu). Deve essere compreso tra 0 e 1, in genere compreso tra 0,1 e 0,5. Il valore predefinito è 0,1.

shrink

Usa l'euristica compattante se True. In questo caso, alcuni campioni verranno "compattati" durante la procedura di training, che potrebbe velocizzare il training. Il valore predefinito è True.

Normalizzare

Specifica il tipo di normalizzazione automatica utilizzata:

  • "Auto": se è necessaria la normalizzazione, viene eseguita automaticamente. Questa è la scelta predefinita.

  • "No": non viene eseguita alcuna normalizzazione.

  • "Yes": viene eseguita la normalizzazione.

  • "Warn": se è necessaria la normalizzazione, viene visualizzato un messaggio di avviso, ma la normalizzazione non viene eseguita.

La normalizzazione ridimensiona intervalli di dati diversi a una scala standard. La scalabilità delle funzionalità garantisce che le distanze tra i punti dati siano proporzionali e consentano a vari metodi di ottimizzazione, ad esempio la discesa del gradiente, di convergere molto più velocemente. Se viene eseguita la normalizzazione, viene usato un MaxMin normalizzatore. Normalizza i valori in un intervallo [a, b] dove -1 <= a <= 0 e b - a = 10 <= b <= 1 . Questo normalizzatore mantiene la spazità eseguendo il mapping di zero a zero.

ml_transforms

Specifica un elenco di trasformazioni MicrosoftML da eseguire sui dati prima del training o Nessuna se non devono essere eseguite trasformazioni. Per le trasformazioni supportate, vedere featurize_text, categoricale categorical_hash. Queste trasformazioni vengono eseguite dopo le trasformazioni Python specificate. Il valore predefinito è None.

ml_transform_vars

Specifica un vettore di caratteri di nomi di variabile da utilizzare in ml_transforms o Nessuno se non è necessario usare nessuno. Il valore predefinito è None.

row_selection

NON SUPPORTATO. Specifica le righe (osservazioni) del set di dati che devono essere usate dal modello con il nome di una variabile logica del set di dati (tra virgolette) o con un'espressione logica usando variabili nel set di dati. Per esempio:

  • row_selection = "old" userà solo osservazioni in cui il valore della variabile old è True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) usa solo osservazioni in cui il valore della age variabile è compreso tra 20 e 65 e il valore della logincome variabile è maggiore di 10.

La selezione delle righe viene eseguita dopo l'elaborazione di tutte le trasformazioni dei dati (vedere gli transforms argomenti o transform_function). Come per tutte le espressioni, row_selection può essere definito all'esterno della chiamata di funzione usando la expression funzione .

Trasforma

NON SUPPORTATO. Espressione del form che rappresenta il primo round delle trasformazioni delle variabili. Come per tutte le espressioni, transforms (o row_selection) può essere definito all'esterno della chiamata di funzione usando la expression funzione .

transform_objects

NON SUPPORTATO. Elenco denominato che contiene oggetti a cui è possibile fare riferimento da transforms, transform_functione row_selection.

transform_function

Funzione di trasformazione della variabile.

transform_variables

Vettore di caratteri delle variabili del set di dati di input necessario per la funzione di trasformazione.

transform_packages

NON SUPPORTATO. Vettore di caratteri che specifica pacchetti Python aggiuntivi (al di fuori di quelli specificati in RxOptions.get_option("transform_packages")) da rendere disponibili e precaricati per l'uso nelle funzioni di trasformazione delle variabili. Ad esempio, quelli definiti in modo esplicito nelle funzioni revoscalepy tramite i relativi transforms argomenti e transform_function o quelli definiti in modo implicito tramite i rispettivi formula argomenti o row_selection . L'argomento transform_packages può anche essere Nessuno, a indicare che non vengono precaricati pacchetti esterni RxOptions.get_option("transform_packages") .

transform_environment

NON SUPPORTATO. Ambiente definito dall'utente da usare come padre per tutti gli ambienti sviluppati internamente e usati per la trasformazione dei dati delle variabili. Se transform_environment = None, viene invece usato un nuovo ambiente "hash" con revoscalepy.baseenv padre.

blocks_per_read

Specifica il numero di blocchi da leggere per ogni blocco di dati letto dall'origine dati.

report_progress

Valore intero che specifica il livello di creazione di report sullo stato di elaborazione delle righe:

  • 0: non viene segnalato alcun avanzamento.

  • 1: il numero di righe elaborate viene stampato e aggiornato.

  • 2: vengono segnalate le righe elaborate e le tempistiche.

  • 3: vengono segnalate le righe elaborate e tutte le tempistiche.

verbose

Valore intero che specifica la quantità di output desiderata. Se 0, non viene stampato alcun output dettagliato durante i calcoli. Valori interi da 1 per 4 fornire quantità crescenti di informazioni.

compute_context

Imposta il contesto in cui vengono eseguiti i calcoli, specificati con una revoscalepy valida. RxComputeContext. Attualmente locale e revoscalepy. Sono supportati i contesti di calcolo RxInSqlServer.

Ensemble

Parametri di controllo per l'incenso.

Restituzioni

Oggetto OneClassSvm con il modello sottoposto a training.

Annotazioni

Questo algoritmo è a thread singolo e tenterà sempre di caricare l'intero set di dati in memoria.

Vedere anche

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, . rx_predict

References

Wikipedia: Rilevamento anomalie

Microsoft Azure Machine Learning Studio (versione classica): macchina a vettori di supporto One-Class

Stima del supporto di una distribuzione High-Dimensional

Nuovi algoritmi di vettore di supporto

LIBSVM: libreria per le macchine vettoriali di supporto

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

Risultato:

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