Condividi tramite


microsoftml.rx_oneclass_svm: rilevamento anomalie

Utilizzo

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)

Descrizione

Macchine a vettori di supporto a una classe di Machine Learning

Dettagli

One-class SVM è un algoritmo per il rilevamento anomalie. L'obiettivo del rilevamento anomalie consiste nell'identificare gli outlier che non appartengono ad alcuna classe di destinazione. Questo tipo di SVM è a una classe perché il set di training contiene solo esempi della classe di destinazione. Deduce le proprietà normali per gli oggetti nella classe di destinazione e in base a queste proprietà predice quali esempi sono diversi rispetto agli esempi normali. Si tratta di una funzione utile per il rilevamento anomalie, in quanto la scarsità di esempi di training è il carattere che contraddistingue le anomalie: in genere, sono presenti pochi esempi di intrusioni di rete, frodi o altri tipi di comportamento anomalo.

Argomenti

formula

Formula come descritto in revoscalepy.rx_formula. I 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 vengono archiviati i dati di training. Aumentare questo valore per set di training di grandi dimensioni. Il valore predefinito è 100 MB.

kernel

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

  • rbf_kernel: kernel della funzione di base radiale. Il parametro rappresenta gamma nel termine exp(-gamma|x-y|^2. Se non specificato, il valore predefinito è 1 diviso per il numero di funzionalità usate. Ad esempio, rbf_kernel(gamma = .1). Si tratta del valore predefinito.

  • linear_kernel: kernel lineare.

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

  • sigmoid_kernel: kernel sigmoideo con nomi di parametro gamma e coef0 nel termine tanh(gamma*<x,y> + coef0). Il valore predefinito di gamma è 1 diviso per il numero di funzionalità. Il valore predefinito del parametro coef0 è 0. Ad esempio, sigmoid_kernel(gamma = .1, coef0 = 0).

epsilon

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

nu

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

shrink

Usa l'euristica di compattazione se True. In caso, alcuni esempi verranno compattati durante la procedura di training in modo da poter velocizzare il training. Il valore predefinito è True.

normalize

Specifica il tipo di normalizzazione automatica usata:

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

  • "No": non viene eseguita alcuna normalizzazione.

  • "Yes": la normalizzazione viene eseguita.

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

La normalizzazione ridimensiona diversi intervalli di dati in base a una scala standard. Il ridimensionamento delle funzioni assicura che le distanze tra i punti dati siano proporzionali e consente di accelerare significativamente la convergenza di diversi metodi di ottimizzazione, tra cui la discesa di gradiente. Se la normalizzazione viene eseguita, viene usato un normalizzatore MaxMin. I valori vengono normalizzati in un intervallo [a, b], dove -1 <= a <= 0 e 0 <= b <= 1 e b - a = 1. Questo normalizzatore mantiene la sparsità eseguendo il mapping di zero a zero.

ml_transforms

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

ml_transform_vars

Specifica un vettore di caratteri di nomi di variabili da usare in ml_transforms o None se non è necessario usarne alcuno. Il valore predefinito è None.

row_selection

NON SUPPORTATO. Specifica le righe (osservazioni) dal set di dati che devono essere usate dal modello con il nome di una variabile logica dal set di dati (tra virgolette) o con un'espressione logica tramite variabili nel set di dati. Ad 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 variabile age è compreso tra 20 e 65 e il valore di log della variabile income è maggiore di 10.

La selezione delle righe viene eseguita dopo l'elaborazione di eventuali trasformazioni dei dati. Vedere gli argomenti transforms o transform_function. Analogamente a tutte le espressioni, è possibile definire row_selection all'esterno della chiamata alla funzione usando la funzione expression.

trasformazioni

NON SUPPORTATO. Espressione con un formato che rappresenta il primo ciclo di trasformazioni delle variabili. Analogamente a tutte le espressioni, è possibile definire transforms o row_selection all'esterno della chiamata alla funzione usando la funzione expression.

transform_objects

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

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 altri pacchetti Python, oltre a 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 argomenti transforms e transform_function o quelli definiti in modo implicito tramite i relativi argomenti formula o row_selection. L'argomento transform_packages può anche essere NoneRxOptions.get_option("transform_packages"), che indica che non vengono precaricati pacchetti esterni a .

transform_environment

NON SUPPORTATO. Ambiente definito dall'utente da usare come elemento padre di 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 a 4 per fornire quantità crescenti di informazioni.

compute_context

Imposta il contesto in cui vengono eseguiti i calcoli, specificato con un revoscalepy.RxComputeContext valido. Sono attualmente supportati contesti di calcolo locali e revoscalepy.RxInSqlServer.

ensemble

Parametri di controllo per l'ensembling.

Restituisce

Oggetto OneClassSvm con il modello sottoposto a training.

Nota

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

Vedi anche

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

Riferimenti

Wikipedia: Rilevamento anomalie

Studio di Microsoft Azure Machine Learning (versione classica): macchina a vettori di supporto a una classe

Stima del supporto di una distribuzione a elevata dimensionalità

Nuovi algoritmi di vettore di supporto

LIBSVM: libreria per le macchine a vettori di supporto

Esempio

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

Output:

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