rxEnsemble: conjuntos
Treinar um conjunto de modelos
Uso
rxEnsemble(formula = NULL, data, trainers, type = c("binary", "regression",
"multiClass", "anomaly"), randomSeed = NULL,
modelCount = length(trainers), replace = FALSE, sampRate = NULL,
splitData = FALSE, combineMethod = c("median", "average", "vote"),
maxCalibration = 1e+05, mlTransforms = NULL, mlTransformVars = NULL,
rowSelection = NULL, transforms = NULL, transformObjects = NULL,
transformFunc = NULL, transformVars = NULL, transformPackages = NULL,
transformEnvir = NULL, blocksPerRead = rxGetOption("blocksPerRead"),
reportProgress = rxGetOption("reportProgress"), verbose = 1,
computeContext = rxGetOption("computeContext"), ...)
Argumentos
formula
A fórmula como descrita em rxFormula. No momento, não há suporte para termos de interação nem para F()
no MicrosoftML.
data
Um objeto de fonte de dados ou uma cadeia de caracteres que especifica um arquivo .xdf ou um objeto de estrutura de dados. Como alternativa, ele pode ser uma lista de fontes de dados que indicam que cada modelo deve ser treinado usando uma das fontes de dados na lista. Nesse caso, o comprimento da lista de dados precisa ser igual a modelCount
.
trainers
Uma lista de treinadores com os respectivos argumentos. Os treinadores são criados usando fastTrees, fastForest, fastLinear, logisticRegression ou neuralNet.
type
Uma cadeia de caracteres que especifica o tipo de conjunto: "binary"
para Classificação Binária ou "regression"
para Regressão.
randomSeed
Especifica a semente aleatória. O valor padrão é NULL
.
modelCount
Especifica o número de modelos a serem treinados. Se esse número for maior que o comprimento da lista de treinadores, essa lista será duplicada para corresponder a modelCount
.
replace
Um valor lógico que especifica se a amostragem de observações deve ser feita com ou sem substituição. O valor padrão é /codeFALSE.
sampRate
um escalar de valor positivo que especifica o percentual de observações a ser amostrado para cada treinador. O padrão é 1.0 para amostragem com substituição (ou seja, replace=TRUE) e 0,632 para amostragem sem substituição (ou seja, replace=FALSE). Quando o splitData for TRUE, o padrão de sampRate será 1,0 (nenhuma amostragem é feita antes da divisão).
splitData
Um valor lógico que especifica se os modelos base devem ou não serem treinados em partições não sobrepostas. O padrão é FALSE
. Ele está disponível apenas para o contexto de computação RxSpark
e é ignorado nos outros contextos.
combineMethod
Especifica o método usado para combinar modelos:
median
para computar a mediana das saídas do modelo individual,average
: para computar a média das saídas do modelo individual evote
para computar (pos-neg)/o número total de modelos, em que “pos” é o número de saídas positivas e “neg” é o número de saídas negativas.
maxCalibration
Especifica o número máximo de exemplos a serem usados para calibração. Esse argumento é ignorado em todas as tarefas que não são a classificação binária.
mlTransforms
Especifica uma lista de transformações do MicrosoftML a serem executadas nos dados antes do treinamento ou NULL
para que nenhuma transformação seja executada. Transformações que exigem uma passagem adicional nos dados (como featurizeText, categorical) não são permitidas. Essas transformações são executadas após as transformações R especificadas. O valor padrão é NULL
.
mlTransformVars
Especifica um vetor de caracteres de nomes de variáveis a serem usados em mlTransforms
ou NULL
quando não é usado nenhum nome. O valor padrão é NULL
.
rowSelection
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, rowSelection = "old"
usará apenas observações nas quais o valor da variável old
seja TRUE
. rowSelection = (age > 20) & (age < 65) & (log(income) > 10)
apenas usa observações nas quais o valor da variável age
está entre 20 e 65 e o valor de log
da variável income
é maior que 10. A seleção de linha é executada após o processamento de todas as transformações de dados (confira os argumentos transforms
ou transformFunc
). Assim como acontece com todas as expressões, é possível definir rowSelection
fora da chamada de função usando a função de expressão.
transforms
Uma expressão do formato list(name = expression, ``...)
que representa a primeira rodada de transformações de variável. Assim como acontece com todas as expressões, é possível definir transforms
(ou rowSelection
) fora da chamada de função usando a função de expressão. O valor padrão é NULL
.
transformObjects
Uma lista nomeada que contém objetos que podem ser referenciados por transforms
, transformsFunc
e rowSelection
. O valor padrão é NULL
.
transformFunc
A função de transformação de variável. Confira rxTransform para obter detalhes. O valor padrão é NULL
.
transformVars
Um vetor de caracteres de variáveis do conjunto de dados de entrada necessário para a função de transformação. Confira rxTransform para obter detalhes. O valor padrão é NULL
.
transformPackages
Um vetor de caracteres que especifica pacotes R adicionais (fora aqueles especificados em rxGetOption("transformPackages")
) a serem disponibilizados e pré-carregados para uso em funções de transformação de variável. Por exemplo, os definidos explicitamente nas funções RevoScaleR por meio dos respectivos argumentos transforms
e transformFunc
ou os definidos implicitamente por meio dos respectivos argumentos formula
ou rowSelection
. O argumento transformPackages
também pode ser NULL
, indicando que nenhum pacote fora de rxGetOption("transformPackages")
é pré-carregado. O valor padrão é NULL
.
transformEnvir
Um ambiente definido pelo usuário para funcionar como um pai de todos os ambientes desenvolvidos internamente e usados para transformação de dados de variável. Se transformEnvir = NULL
, um novo ambiente de “hash” com baseenv()
pai é usado. O valor padrão é NULL
.
blocksPerRead
Especifica o número de blocos a serem lidos em cada parte dos dados lidos da fonte de dados.
reportProgress
Um valor inteiro que especifica o nível de relatório sobre o progresso do processamento de linha:
0
: não é relatado nenhum progresso.1
: o número de linhas processadas é impresso e atualizado.2
: as linhas processadas e os tempos são relatados.3
: as linhas processadas e todos os tempos são relatados.
verbose
Um valor inteiro que especifica a quantidade de saída desejada. Se definido como 0
, não será impressa nenhuma saída detalhada durante os cálculos. Valores inteiros de 1
a 4
fornecem quantidades crescentes de informações. O valor padrão é 1
.
computeContext
Define o contexto no qual as computações são executadas, especificado com um RxComputeContext válido. No momento, há suporte para os contextos de computação local e RxSpark. Quando RxSpark é especificado, o treinamento dos modelos é feito de maneira distribuída e a definição do conjunto é feita localmente. Observe que o contexto de computação não pode ser “sem espera”.
...
Argumentos adicionais a serem passados diretamente para o Microsoft Compute Engine.
Detalhes
/coderxEnsemble é uma função que treina vários modelos de vários tipos para obter um desempenho preditivo melhor do que seria obtido de um só modelo.
Valor
Um objeto rxEnsemble
com o modelo de conjunto treinado.
Exemplos
# Create an ensemble of regression rxFastTrees models
# use xdf data source
dataFile <- file.path(rxGetOption("sampleDataDir"), "claims4blocks.xdf")
rxGetInfo(dataFile, getVarInfo = TRUE, getBlockSizes = TRUE)
form <- cost ~ age + type + number
rxSetComputeContext("localpar")
rxGetComputeContext()
# build an ensemble model that contains three 'rxFastTrees' models with different parameters
ensemble <- rxEnsemble(
formula = form,
data = dataFile,
type = "regression",
trainers = list(fastTrees(), fastTrees(numTrees = 60), fastTrees(learningRate = 0.1)), #a list of trainers with their arguments.
replace = TRUE # Indicates using a bootstrap sample for each trainer
)
# use text data source
colInfo <- list(DayOfWeek = list(type = "factor", levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")))
source <- system.file("SampleData/AirlineDemoSmall.csv", package = "RevoScaleR")
data <- RxTextData(source, missingValueString = "M", colInfo = colInfo)
# When 'distributed' is TRUE distributed data source is created
distributed <- FALSE
if (distributed) {
bigDataDirRoot <- "/share"
inputDir <- file.path(bigDataDirRoot, "AirlineDemoSmall")
rxHadoopMakeDir(inputDir)
rxHadoopCopyFromLocal(source, inputDir)
hdfsFS <- RxHdfsFileSystem()
data <- RxTextData(file = inputDir, missingValueString = "M", colInfo = colInfo, fileSystem = hdfsFS)
}
# When 'distributed' is TRUE training is distributed
if (distributed) {
cc <- rxSetComputeContext(RxSpark())
} else {
cc <- rxGetComputeContext()
}
ensemble <- rxEnsemble(
formula = ArrDelay ~ DayOfWeek,
data = data,
type = "regression",
trainers = list(fastTrees(), fastTrees(numTrees = 60), fastTrees(learningRate = 0.1)), # The ensemble will contain three 'rxFastTrees' models
replace = TRUE # Indicates using a bootstrap sample for each trainer
)
# Change the compute context back to previous for scoring
rxSetComputeContext(cc)
# Put score and model variables in data frame
scores <- rxPredict(ensemble, data = data, writeModelVars = TRUE)
# Plot actual versus predicted values with smoothed line
rxLinePlot(Score ~ ArrDelay, type = c("p", "smooth"), data = scores)