Partager via


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ésente gamma dans le terme exp(-gamma|x-y|^2. S’il n’est pas spécifié, la valeur par défaut est 1 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ètres a, bias et deg dans le terme (a*<x,y> + bias)^deg. bias, la valeur par défaut est 0. Degré, deg, la valeur par défaut est 3. Si 1 n’est pas spécifié, la valeur est a divisé par le nombre de fonctionnalités utilisées.

  • sigmoid_kernel : noyau sigmoïde avec les noms gamma et coef0 dans le terme tanh(gamma*<x,y> + coef0). gamma, la valeur par défaut est 1 divisé par le nombre de fonctionnalités utilisées. La valeur par défaut du paramètre coef0 est 0. 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 variable old est True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) utilise uniquement les observations dans lesquelles la valeur de la variable age est comprise entre 20 et 65, et la valeur log de la variable income 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