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 rappresentagamma
nel termineexp(-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 parametroa
,bias
edeg
nel termine(a*<x,y> + bias)^deg
. Il valore predefinito dibias
è0
. Il valore predefinito del grado,deg
, è3
. Sea
non viene specificato, viene impostato su1
diviso per il numero di funzionalità.sigmoid_kernel
: kernel sigmoideo con nomi di parametrogamma
ecoef0
nel terminetanh(gamma*<x,y> + coef0)
. Il valore predefinito digamma
è1
diviso per il numero di funzionalità. Il valore predefinito del parametrocoef0
è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 variabileold
èTrue
.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
usa solo osservazioni in cui il valore della variabileage
è compreso tra 20 e 65 e il valore dilog
della variabileincome
è 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_function
e 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
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