microsoftml.rx_fast_linear: Modelo linear com ascensão de coordenadas duales estocásticas

Usage

microsoftml.rx_fast_linear()

Description

Um treinador de otimização de Escalada Dupla Estocástica de Coordenadas (SDCA) para classificação binária linear e regressão.

Detalhes

rx_fast_linear é um treinador baseado no método Stochastic Dual Coordinate Ascent (SDCA), uma técnica de otimização de última geração para funções objetivo convexas. O algoritmo pode ser escalado para uso em grandes conjuntos de dados fora de memória devido a uma implementação semi-assíncrona que suporta multithreading. A convergência é subscrita pela imposição periódica da sincronização entre atualizações primal e dual em um thread separado. Diversas opções de funções de perda também são fornecidas. O método SDCA combina várias das melhores propriedades e capacidades dos algoritmos de regressão logística e SVM. Para mais informações sobre a SDCA, veja as citações na seção de referências.

Algoritmos tradicionais de otimização, como a descida estocástica do gradiente (SGD), otimizam diretamente a função de perda empírica. A SDCA opta por uma abordagem diferente que otimiza o problema dual. A função de perda dual é parametrizada por pesos por exemplo. Em cada iteração, quando um exemplo de treinamento do conjunto de dados de treinamento é lido, o peso correspondente do exemplo é ajustado para que a função de perda dual seja otimizada em relação ao exemplo atual. Não é necessária taxa de aprendizado para a SDCA para determinar o tamanho do passo, como é exigido por vários métodos de descida por gradiente.

rx_fast_linear Atualmente, suporta classificação binária com três tipos de funções de perda: perda logarítmica, perda por dobradiça e perda de dobradiça suavizada. A regressão linear também suporta a função de perda quadrática. A regularização elástica pode ser especificada pelos l2_weight parâmetros e.l1_weight Note que o l2_weight tem efeito na taxa de convergência. Em geral, quanto maior o l2_weight, mais rápido converge a SDCA.

Note que rx_fast_linear é um algoritmo de otimização estocástica e de streaming. Os resultados dependem da ordem dos dados de treinamento. Para resultados reprodutíveis, recomenda-se que se ajuste shuffle para False e train_threads para 1.

Argumentos

fórmula

A fórmula descrita em revoscalepy.rx_formula. No momento, não há suporte para termos F() de interação no microsoftml.

dados

Um objeto de fonte de dados ou uma cadeia de caracteres especificando um arquivo .xdf ou um objeto de quadro de dados.

método

Especifica o tipo de modelo com uma cadeia de caracteres: "binary" para a classificação binária padrão ou "regression" para regressão linear.

loss_function

Especifica a função de perda empírica a otimizar. Para classificação binária, as seguintes opções estão disponíveis:

  • log_loss: A perda de tronco. Este é o padrão.

  • hinge_loss: A perda da dobradiça do SVM. Seu parâmetro representa o tamanho da margem.

  • smooth_hinge_loss: A perda suavizada da dobradiça. Seu parâmetro representa a constante de suavização.

Para regressão linear, a perda squared_loss ao quadrado é atualmente suportada. Quando esse parâmetro é definido como Nenhum, seu valor padrão depende do tipo de aprendizado:

O exemplo a seguir altera a loss_function para hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Especifica o peso de regularização L1. O valor deve ser ou não negativo ou Nenhum. Se Nenhum for especificado, o valor real é automaticamente calculado com base no conjunto de dados. Nenhum é o valor padrão.

l2_weight

Especifica o peso de regularização L2. O valor deve ser ou não negativo ou Nenhum. Se Nenhum for especificado, o valor real é automaticamente calculado com base no conjunto de dados. Nenhum é o valor padrão.

train_threads

Especifica quantas threads concorrentes podem ser usadas para rodar o algoritmo. Quando esse parâmetro é definido como Nenhum, o número de threads usados é determinado com base no número de processadores lógicos disponíveis para o processo, bem como na escassez dos dados. Defina para 1 rodar o algoritmo em um único thread.

convergence_tolerance

Especifica o limiar de tolerância usado como critério de convergência. Deve estar entre 0 e 1. O valor padrão é 0.1. O algoritmo é considerado convergente se a lacuna de dualidade relativa, que é a razão entre a lacuna de dualidade e a perda primal, ficar abaixo da tolerância de convergência especificada.

max_iterations

Especifica um limite superior para o número de iterações de treinamento. Esse parâmetro deve ser positivo ou Nenhum. Se Nenhum for especificado, o valor real é automaticamente calculado com base no conjunto de dados. Cada iteração requer uma passagem completa sobre os dados de treinamento. O treinamento termina após o número total de iterações atingir o limite superior especificado ou quando a função de perda converge, o que acontecer antes.

ordem aleatória

Especifica se é necessário embaralhar os dados de treinamento. Configurado True para embaralhar os dados; False não para embaralhar. O valor padrão é True. SDCA é um algoritmo de otimização estocástica. Se o embaralhamento estiver ativado, os dados de treinamento são embaralhados em cada iteração.

check_frequency

O número de iterações após as quais a função de perda é calculada e verificada para determinar se ela convergiu. O valor especificado deve ser um inteiro positivo ou Nenhum. Se não houver, o valor real é calculado automaticamente com base no conjunto de dados. Caso contrário, por exemplo, se checkFrequency = 5 for especificado, então a função de perda é calculada e a convergência é verificada a cada 5 iterações. O cálculo da função de perda requer uma passagem completa separada sobre os dados de treinamento.

normalizar

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

  • "Auto": se a normalização for necessária, ela será executada automaticamente. Essa é a opção padrão.

  • "No": nenhuma normalização é executada.

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

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

A normalização redimensiona intervalos de dados diferentes para uma escala padrão. O dimensionamento de recursos garante que as distâncias entre os pontos de dados sejam proporcionais e permite que vários métodos de otimização, como descendente de gradiente, convergam muito mais rapidamente. Se a normalização for executada, um MaxMin normalizador será usado. Normaliza valores em um intervalo [a, b] onde -1 <= a <= 0 e 0 <= b <= 1b - a = 1. Esse normalizador preserva a moderação mapeando zero a zero.

ml_transforms

Especifica uma lista de transformações do MicrosoftML a serem executadas nos dados antes do treinamento ou Nenhuma se nenhuma transformação deve ser executada. Consulte featurize_text, categoricale categorical_hash, para transformações com suporte. Essas transformações são executadas após quaisquer transformações do Python especificadas. O valor padrão é None.

ml_transform_vars

Especifica um vetor de caracteres de nomes de variáveis a serem usados ou ml_transformsNenhum se nenhum for usado. O valor padrão é None.

row_selection

SEM SUPORTE. Especifica as linhas (observações) do conjunto de dados que devem ser 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 no conjunto de dados. Por exemplo:

  • row_selection = "old" usará apenas observações nas quais o valor da variável old é True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) usa apenas observações nas quais o valor da age variável está entre 20 e 65 e o valor da logincome variável é maior que 10.

A seleção de linha é executada após o processamento de transformações de dados (consulte os argumentos transforms ou transform_function). Assim como acontece com todas as expressões, row_selection pode ser definido fora da chamada de função usando a expression função.

Transforma

SEM SUPORTE. Uma expressão do formulário que representa a primeira rodada de transformações variáveis. Assim como acontece com todas as expressões, transforms (ou row_selection) pode ser definido fora da chamada de função usando a expression função.

transform_objects

SEM SUPORTE. Uma lista nomeada que contém objetos que podem ser referenciados por transforms, transform_functione row_selection.

transform_function

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

transform_variables

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

transform_packages

SEM SUPORTE. Um vetor de caracteres que especifica pacotes python adicionais (fora daqueles especificados em RxOptions.get_option("transform_packages")) a serem disponibilizados e pré-carregados para uso em funções de transformação variável. Por exemplo, aqueles explicitamente definidos em funções revoscalepy por meio de seus transforms argumentos ou transform_function argumentos ou aqueles definidos implicitamente por meio de seus formula argumentos ou row_selection argumentos. O transform_packages argumento também pode ser Nenhum, indicando que nenhum pacote externo RxOptions.get_option("transform_packages") está pré-carregado.

transform_environment

SEM SUPORTE. Um ambiente definido pelo usuário para servir como pai para todos os ambientes desenvolvidos internamente e usados para transformação de dados variáveis. Se transform_environment = None, um novo ambiente "hash" com parent revoscalepy.baseenv será usado em vez disso.

blocks_per_read

Especifica o número de blocos a serem lidos para cada parte dos dados lidos da fonte de dados.

report_progress

Um valor inteiro que especifica o nível de relatório sobre o progresso do processamento de linhas:

  • 0: nenhum progresso é relatado.

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

  • 2: linhas processadas e intervalos são relatados.

  • 3: linhas processadas e todos os intervalos são relatados.

detalhada

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

compute_context

Define o contexto no qual os cálculos são executados, especificado com um revoscalepy válido. RxComputeContext. Atualmente local e revoscalepy. Há suporte para contextos de computação RxInSqlServer .

Conjunto

Controlar parâmetros para ensembling.

Returns

Um FastLinear objeto com o modelo treinado.

Note

Esse algoritmo é multithread e não tenta carregar todo o conjunto de dados na memória.

References

Ampliando a Ascensão Estocástica de Coordenadas Duplas

Métodos estocásticos de subida de coordenadas duplas para minimização regularizada de perdas

Exemplo de classificação binária

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

infert = get_dataset("infert")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_model, data=data_test,
                     extra_vars_to_write=["isCase", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

Saída:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

Exemplo de regressão

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

Saída:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

Funções de perda