microsoftml.rx_oneclass_svm : détection d’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
Machines à vecteurs de support (SVM) One-Class pour le Machine Learning
Détails
One-Class SVM (Support Vector Machines) désigne un algorithme de détection d’anomalie. L’objectif de la détection d’anomalie est d’identifier les valeurs hors norme qui n’appartiennent pas à une classe cible. Ce type de SVM est dit « One-Class » (classe unique), car le jeu d’apprentissage contient uniquement des exemples de la classe cible. Il déduit quelles propriétés sont normales pour les objets de la classe cible et, à partir de ces propriétés, prédit les exemples qui diffèrent des exemples normaux. Cela est utile pour la détection d’anomalies, car c’est le manque d’exemples d’apprentissage qui définit le caractère même des anomalies : en général, il existe très peu d’exemples d’intrusion réseau, de fraude ou d’autres types de comportements anormaux.
Arguments
formule
La formule est décrite dans revoscalepy.rx_formula.
Les termes de l’interaction et F()
ne sont actuellement pas pris en charge dans microsoftml.
data
Objet source de données ou chaîne de caractères spécifiant un fichier .xdf ou un objet de trame de données.
cache_size
Taille maximale en Mo du cache qui stocke les données d’apprentissage. Augmentez cette valeur pour les jeux d’apprentissage volumineux. La valeur par défaut est 100 Mo.
noyau
Chaîne de caractères représentant le noyau utilisé pour calculer les produits internes. Pour plus d’informations, consultez ma_kernel()
. Les choix suivants sont disponibles :
rbf_kernel
: noyau de fonction de base radiale. Son paramètre représentegamma
dans le termeexp(-gamma|x-y|^2
. S’il n’est pas spécifié, la valeur par défaut est1
divisé par le nombre de fonctionnalités utilisées. Par exemple,rbf_kernel(gamma = .1)
. Il s'agit de la valeur par défaut.linear_kernel
: noyau linéaire.polynomial_kernel
: noyau polynomial avec les noms de paramètresa
,bias
etdeg
dans le terme(a*<x,y> + bias)^deg
.bias
, la valeur par défaut est0
. Degré,deg
, la valeur par défaut est3
. Si1
n’est pas spécifié, la valeur esta
divisé par le nombre de fonctionnalités utilisées.sigmoid_kernel
: noyau sigmoïde avec les nomsgamma
etcoef0
dans le termetanh(gamma*<x,y> + coef0)
.gamma
, la valeur par défaut est1
divisé par le nombre de fonctionnalités utilisées. La valeur par défaut du paramètrecoef0
est0
. Par exemple,sigmoid_kernel(gamma = .1, coef0 = 0)
.
epsilon
Seuil de convergence de l’optimiseur. Si l’amélioration entre les itérations est inférieure à ce seuil, l’algorithme s’arrête et renvoie le modèle actuel. La valeur doit être supérieure ou égale à numpy.finfo(double).eps
. La valeur par défaut est 0,001.
nu
Compromis entre la fraction de valeurs hors norme et le nombre de vecteurs de support (représenté par la lettre grecque nu). Doit être compris entre 0 et 1, généralement entre 0,1 et 0,5. La valeur par défaut est 0,1.
shrink
Utilise l’heuristique de réduction si True
. Dans ce cas, certains échantillons sont « réduits » au cours de la procédure d’apprentissage, ce qui peut accélérer l’apprentissage. La valeur par défaut est True
.
normalize
Spécifie le type de normalisation automatique utilisé :
"Auto"
: si la normalisation est nécessaire, elle est effectuée automatiquement. Il s’agit de la valeur par défaut."No"
: aucune normalisation n’est effectuée."Yes"
: la normalisation est effectuée."Warn"
: si la normalisation est nécessaire, un message d’avertissement s’affiche, mais la normalisation n’est pas effectuée.
La normalisation redimensionne les plages de données disparates à une échelle standard. La mise à l’échelle des caractéristiques garantit que les distances entre les points de données sont proportionnelles et permet aux différentes méthodes d’optimisation, comme la descente de gradient, de converger beaucoup plus rapidement. Si la normalisation est effectuée, un normaliseur MaxMin
est utilisé. Il normalise les valeurs dans un intervalle [a, b] où -1 <= a <= 0
, 0 <= b <= 1
et b - a = 1
. Ce normaliseur conserve la densité en mappant zéro à zéro.
ml_transforms
Spécifie la liste des transformations MicrosoftML à effectuer sur les données avant l’apprentissage ou Aucune si aucune transformation ne doit être effectuée. Consultez featurize_text
, categorical
et categorical_hash
pour connaître les transformations prises en charge.
Ces transformations sont effectuées après les transformations Python spécifiées.
La valeur par défaut est Aucun.
ml_transform_vars
Spécifie un vecteur de caractères des noms de variables à utiliser dans ml_transforms
ou Aucun si aucun ne doit être utilisé.
La valeur par défaut est Aucun.
row_selection
NON PRIS EN CHARGE. Spécifie les lignes (observations) du jeu de données qui doivent être utilisées par le modèle avec le nom d’une variable logique du jeu de données (entre guillemets) ou avec une expression logique utilisant des variables dans le jeu de données. Par exemple :
row_selection = "old"
utilise uniquement les observations dans lesquelles la valeur de la variableold
estTrue
.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
utilise uniquement les observations dans lesquelles la valeur de la variableage
est comprise entre 20 et 65, et la valeurlog
de la variableincome
est supérieure à 10.
La sélection de ligne est effectuée après le traitement de toutes les transformations de données (consultez les arguments transforms
ou transform_function
). Comme avec toutes les expressions, row_selection
peut être défini en dehors de l’appel de fonction à l’aide de la fonction expression
.
transformations
NON PRIS EN CHARGE. Expression de la forme qui représente la première série de transformations de variables. Comme avec toutes les expressions, transforms
(ou expression
) peut être défini en dehors de l’appel de fonction à l’aide de la fonction row_selection
.
transform_objects
NON PRIS EN CHARGE. Liste nommée qui contient des objets qui peuvent être référencés par transforms
, transform_function
et row_selection
.
transform_function
Fonction de transformation de variables.
transform_variables
Vecteur de caractère des variables de jeu de données d’entrée nécessaires pour la fonction de transformation.
transform_packages
NON PRIS EN CHARGE. Vecteur de caractère spécifiant des packages Python supplémentaires (en dehors de ceux spécifiés dans RxOptions.get_option("transform_packages")
) qui doivent être disponibles et préchargés pour l’utilisation dans les fonctions de transformation de variables.
Par exemple, ceux définis explicitement dans les fonctions revoscalepy via leurs arguments transforms
et transform_function
ou ceux définis implicitement via leurs arguments formula
ou row_selection
. L’argument transform_packages
peut également être Aucun, ce qui indique qu’aucun package n’est préchargé en dehors de RxOptions.get_option("transform_packages")
.
transform_environment
NON PRIS EN CHARGE. Environnement défini par l’utilisateur qui sert de parent à tous les environnements développés en interne et qui est utilisé pour la transformation de données variables.
Si transform_environment = None
, un nouvel environnement de « hachage » avec le parent revoscalepy.baseenv est utilisé à la place.
blocks_per_read
Spécifie le nombre de blocs à lire pour chaque segment de données lu à partir de la source de données.
report_progress
Valeur entière qui spécifie le niveau de création de rapports sur la progression du traitement de la ligne :
0
: aucune progression n’est signalée.1
: le nombre de lignes traitées est imprimé et mis à jour.2
: les lignes traitées et les minutages sont signalés.3
: les lignes traitées et l’ensemble des minutages sont signalés.
verbose
Valeur entière qui spécifie la quantité de sortie souhaitée.
Si la valeur est 0
, aucune sortie détaillée n’est imprimée au cours des calculs. Les valeurs entières de 1
à 4
fournissent des quantités d’informations croissantes.
compute_context
Définit le contexte dans lequel les calculs sont exécutés, spécifiés avec un contexte revoscalepy.RxComputeContext valide. Actuellement, les contextes de calcul locaux et revoscalepy.RxInSqlServer sont pris en charge.
ensemble
Paramètres de contrôle pour l’apprentissage ensembliste.
Retours
Objet OneClassSvm
avec le modèle entraîné.
Notes
Cet algorithme est à thread unique et tente toujours de charger l’intégralité du jeu de données dans la mémoire.
Voir aussi
linear_kernel
, polynomial_kernel
, rbf_kernel
, sigmoid_kernel
, rx_predict
.
Références
Wikipedia : détection d’anomalie
Microsoft Azure Machine Learning Studio (classique) : machine à vecteurs de support (SVM) One-Class
Estimation de la prise en charge d'une distribution de grande dimension
Nouveaux algorithmes de vecteurs de support
LIBSVM : bibliothèque pour machines à vecteurs de support (SVM)
Exemple
'''
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())
Sortie :
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