Partilhar via


microsoftml.rx_oneclass_svm: Deteção de Anomalias

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

Máquinas de Vetores de Suporte de Uma Classe para Aprendizagem Automática

Detalhes

A SVM de uma classe é um algoritmo para deteção de anomalias. O objetivo da deteção de anomalias é identificar valores atípicos que não pertencem a alguma classe de alvo. Este tipo de SVM é de uma classe porque o conjunto de treino contém apenas exemplos da classe alvo. Infere quais as propriedades que são normais para os objetos da classe alvo e, a partir dessas propriedades, prevê quais os exemplos que são diferentes dos exemplos normais. Isto é útil para a deteção de anomalias porque a escassez de exemplos de treino é o carácter definidor das anomalias: normalmente existem muito poucos exemplos de intrusão de rede, fraude ou outros tipos de comportamento anómalo.

Arguments

fórmula

A fórmula descrita em revoscalepy.rx_formula. Termos de interação e F() não são atualmente suportados no microsoftml.

dados

Um objeto fonte de dados ou uma cadeia de caracteres que especifica um ficheiro .xdf ou um objeto data frame.

cache_size

O tamanho máximo em MB da cache que armazena os dados de treino. Aumente este valor para conjuntos de treino grandes. O valor padrão é 100 MB.

kernel

Uma cadeia de caracteres que representa o núcleo usado para calcular produtos internos. Para obter mais informações, consulte ma_kernel(). As seguintes opções estão disponíveis:

  • rbf_kernel: Núcleo da função base radial. O seu parâmetro representagamma no termo exp(-gamma|x-y|^2. Se não for especificado, por defeito 1 é dividido pelo número de características usadas. Por exemplo, rbf_kernel(gamma = .1). Este é o valor padrão.

  • linear_kernel: Núcleo linear.

  • polynomial_kernel: Núcleo polinomial com nomes ade parâmetros , bias, e deg no termo (a*<x,y> + bias)^deg. O bias, por defeito é 0. O grau, deg, por defeito, é 3. Se a não for especificado, é definido como 1 dividido pelo número de características.

  • sigmoid_kernel: Núcleo sigmoide com nomes gamma de parâmetros e coef0 no termo tanh(gamma*<x,y> + coef0). gamma, por defeito é 1 dividido pelo número de características. O parâmetro coef0 é definido para 0. Por exemplo, sigmoid_kernel(gamma = .1, coef0 = 0).

Épsilon

O limiar para a convergência dos otimizadores. Se a melhoria entre iterações for inferior ao limiar, o algoritmo para e devolve o modelo atual. O valor deve ser maior ou igual a numpy.finfo(double).eps. O valor padrão é 0,001.

nu

O compromisso entre a fração de valores atípicos e o número de vetores de suporte (representados pela letra grega nu). Deve estar entre 0 e 1, tipicamente entre 0,1 e 0,5. O valor padrão é 0,1.

shrink

Usa a heurística de encolhimento se True. Neste caso, algumas amostras serão "encolhidas" durante o processo de treino, o que pode acelerar o treino. O valor predefinido é True.

normalizar

Especifica o tipo de normalização automática utilizada:

  • "Auto": se for necessária normalização, ela é realizada automaticamente. Esta é a escolha padrão.

  • "No": não é realizada qualquer normalização.

  • "Yes": a normalização é realizada.

  • "Warn": se for necessária normalização, é exibida uma mensagem de aviso, mas a normalização não é realizada.

A normalização reescala intervalos de dados díspares para uma escala padrão. A escalabilidade de características assegura que as distâncias entre pontos de dados são proporcionais e permite que vários métodos de otimização, como a descida gradiente, convergam muito mais rapidamente. Se for realizada a normalização, é utilizado um MaxMin normalizador. Normaliza valores num intervalo [a, b] onde -1 <= a <= 0 e 0 <= b <= 1 e b - a = 1. Este normalizador preserva a esparsidade ao mapear zero para zero.

ml_transforms

Especifica uma lista de transformações MicrosoftML a realizar nos dados antes do treino ou Nenhuma se não forem realizadas transformações. Veja featurize_text, categorical, e categorical_hash, para transformações que são suportadas. Estas transformações são realizadas após quaisquer transformações em Python especificadas. O valor predefinido é None.

ml_transform_vars

Especifica um vetor de caracteres com nomes de variáveis a serem usados em ml_transforms ou Nenhum se não for necessário usar nenhum. O valor predefinido é None.

row_selection

NÃO SUPORTADO. Especifica as linhas (observações) do conjunto de dados que serão usadas pelo modelo com o nome de uma variável lógica do conjunto de dados (entre aspas) ou com uma expressão lógica usando variáveis do conjunto de dados. Por exemplo:

  • row_selection = "old" só usará observações em que o valor da variável old é True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) só utiliza observações em que o valor da age variável está entre 20 e 65 e o valor log da income variável é superior a 10.

A seleção de linhas é realizada após o processamento de quaisquer transformações de dados (ver os argumentos transforms ou transform_function). Como em todas as expressões, row_selection pode ser definido fora da chamada de função usando a expression função.

transforma

NÃO SUPORTADO. Uma expressão da forma que representa a primeira ronda de transformações de variáveis. Como em todas as expressões, transforms (ou row_selection) pode ser definido fora da chamada de função usando a expression função.

transform_objects

NÃO SUPORTADO. Uma lista nomeada que contém objetos que podem ser referenciados por transforms, transform_function, e row_selection.

transform_function

A função de transformação de variáveis.

transform_variables

Um vetor de caracteres das variáveis do conjunto de dados de entrada necessárias para a função de transformação.

transform_packages

NÃO SUPORTADO. Um vetor de caracteres que especifica pacotes Python adicionais (para além dos especificados em RxOptions.get_option("transform_packages")) a serem disponibilizados e pré-carregados para uso em funções de transformação de variáveis. Por exemplo, aquelas definidas explicitamente em funções revoscalepy através dos argumentos e transformstransform_function ou aquelas definidas implicitamente através dos argumentos ou formularow_selection . O transform_packages argumento pode também ser Nenhum, indicando que nenhum pacote externo RxOptions.get_option("transform_packages") está pré-carregado.

transform_environment

NÃO SUPORTADO. Um ambiente definido pelo utilizador para servir como pai de todos os ambientes desenvolvidos internamente e usados para transformação de dados variáveis. Se transform_environment = None, é utilizado um novo ambiente "hash" com o pai revoscalepy.baseenv.

blocks_per_read

Especifica o número de blocos a ler para cada bloco de dados lido da fonte de dados.

report_progress

Um valor inteiro que especifica o nível de reporte sobre o progresso do processamento da linha:

  • 0: Não há progresso reportado.

  • 1: o número de linhas processadas é impresso e atualizado.

  • 2: as linhas processadas e os tempos são reportados.

  • 3: linhas processadas e todos os tempos são reportados.

verbose

Um valor inteiro que especifica a quantidade de saída desejada. Se 0, não é impressa nenhuma saída detalhada durante os cálculos. Valores inteiros de 1 para 4 fornecer quantidades crescentes de informação.

compute_context

Define o contexto em que os cálculos são executados, especificado com uma revoscalpy válida. RxComputeContext. Atualmente local e revoscalepy. São suportados contextos de computação RxInSqlServer .

Ensemble

Parâmetros de controlo para a montagem.

Devoluções

Um OneClassSvm objeto com o modelo treinado.

Observação

Este algoritmo é single-threaded e tentará sempre carregar todo o conjunto de dados na memória.

Consulte também

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, . rx_predict

Referências

Wikipédia: Deteção de anomalias

Microsoft Azure Machine Learning Studio (clássico): One-Class Suporte Vector Machine

Estimativa do Suporte de uma Distribuição High-Dimensional

Novos Algoritmos de Vetores de Suporte

LIBSVM: Uma Biblioteca para Máquinas de Vetores de Suporte

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

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