rxFastTrees : Arbre rapide
Fast Tree Machine Learning
Utilisation
rxFastTrees(formula = NULL, data, type = c("binary", "regression"),
numTrees = 100, numLeaves = 20, learningRate = 0.2, minSplit = 10,
exampleFraction = 0.7, featureFraction = 1, splitFraction = 1,
numBins = 255, firstUsePenalty = 0, gainConfLevel = 0,
unbalancedSets = FALSE, trainThreads = 8, randomSeed = NULL,
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 = 2,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
Arguments
formula
La formule telle que décrite dans rxFormula. Les termes d’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.
type
Chaîne de caractères qui indique le type d’arborescence Fast Tree : "binary"
pour la classification binaire Fast Tree par défaut ou "regression"
pour la régression rapide Fast Tree.
numTrees
Indique le nombre total d’arbres de décision à créer dans l’ensemble. En créant davantage d’arbres de décision, vous pouvez potentiellement obtenir une meilleure couverture, mais le temps d’apprentissage augmente. La valeur par défaut est 100.
numLeaves
Nombre maximal de feuilles (nœuds terminaux) qui peuvent être créées dans un arbre. Les valeurs plus élevées augmentent potentiellement la taille de l’arborescence et bénéficient d’une meilleure précision, mais entraîne le surajustement des risques, et les temps d’apprentissage sont plus longs. La valeur par défaut est 20.
learningRate
Détermine la taille de l’étape effectuée dans le sens du gradient à chaque étape du processus d’apprentissage. ioCela détermine la rapidité ou le ralentissement de la convergence de l’apprenant sur la solution optimale. Si la taille d’étape est trop grande, vous risquez de passer à côté de la solution optimale. Si la taille d’étape est trop petite, la formation prend plus de temps pour converger vers la meilleure solution.
minSplit
Nombre minimal d'instances de formation requises pour former une feuille. Autrement dit, le nombre minimal de documents autorisés dans une feuille d’un arbre de régression, en dehors des données sous-échantillonnées. Le fractionnement consiste à diviser de manière aléatoire les caractéristiques à chaque niveau de l’arbre (nœud). La valeur par défaut est 10. Seul le nombre d’instances est compté même si les instances sont pondérées.
exampleFraction
Fraction d’instances choisies de façon aléatoire à utiliser pour chaque arborescence. La valeur par défaut est 0,7.
featureFraction
Fraction de caractéristiques choisies de façon aléatoire à utiliser pour chaque arborescence. La valeur par défaut est 1.
splitFraction
Fraction de caractéristiques choisies de façon aléatoire à utiliser pour chaque fractionnement. La valeur par défaut est 1.
numBins
Nombre maximal de valeurs distinctes (emplacements) par caractéristique. Si la caractéristique a moins de valeurs que le nombre indiqué, chaque valeur est placée dans son propre emplacement. Si le nombre de valeurs est supérieur, l’algorithme crée numBins
emplacements.
firstUsePenalty
La caractéristique utilise tout d’abord le coefficient de pénalité. Il s’agit d’une forme de régularisation qui entraîne une pénalité pour l’utilisation d’une nouvelle caractéristique lors de la création de l’arborescence. Augmentez cette valeur pour créer des arborescences qui n’utilisent pas beaucoup de caractéristiques. La valeur par défaut est 0.
gainConfLevel
L’exigence de confiance de gain de l’arbre doit être comprise dans la plage (0,1). La valeur par défaut est 0.
unbalancedSets
Si TRUE
, les dérivées optimisées pour les ensembles déséquilibrés sont utilisés. S'applique uniquement quand type
est égal à "binary"
. La valeur par défaut est FALSE
.
trainThreads
Nombre de threads à utiliser pour la formation. La valeur par défaut est 8.
randomSeed
Spécifie la valeur de départ aléatoire. La valeur par défaut est NULL
.
mlTransforms
Spécifie la liste des transformations MicrosoftML à effectuer sur les données avant l’entraînement, ou NULL
si aucune transformation ne doit être effectuée. Consultez featurizeText, categorical et categoricalHash pour les transformations prises en charge. Ces transformations sont effectuées après les transformations R spécifiées. La valeur par défaut est NULL
.
mlTransformVars
Spécifie un vecteur de caractères des noms de variables à utiliser dans mlTransforms
ou NULL
si aucun ne doit être utilisé. La valeur par défaut est NULL
.
rowSelection
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, rowSelection = "old"
utilise uniquement les observations dans lesquelles la valeur de la variable old
est TRUE
. rowSelection = (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 transformFunc
). Comme pour toutes les expressions, rowSelection
peut être défini en dehors de l’appel de fonction à l’aide de la fonction d’expression.
transforms
Expression de la forme list(name = expression, ``...)
qui représente la première série de transformations de variables. Comme pour toutes les expressions, transforms
(ou rowSelection
) peut être défini en dehors de l’appel de fonction à l’aide de la fonction d’expression.
transformObjects
Liste nommée qui contient des objets qui peuvent être référencés par transforms
, transformsFunc
et rowSelection
.
transformFunc
Fonction de transformation de variables. Pour plus d’informations, consultez rxTransform.
transformVars
Vecteur de caractère des variables de jeu de données d’entrée nécessaires pour la fonction de transformation. Pour plus d’informations, consultez rxTransform.
transformPackages
Vecteur de caractères spécifiant les packages R supplémentaires (en dehors de ceux spécifiés dans rxGetOption("transformPackages")
) qui doivent être mis à disposition et préchargés pour être utilisés dans les fonctions de transformation de variables. Par exemple, ceux définis explicitement dans les fonctions RevoScaleR via leurs arguments transforms
et transformFunc
ou ceux définis implicitement via leurs arguments formula
ou rowSelection
. L’argument transformPackages
peut également être NULL
, ce qui indique qu’aucun package n’est préchargé en dehors de rxGetOption("transformPackages")
.
transformEnvir
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 transformEnvir = NULL
, un nouvel environnement de « hachage » avec le parent baseenv()
est utilisé à la place.
blocksPerRead
Spécifie le nombre de blocs à lire pour chaque segment de données lu à partir de la source de données.
reportProgress
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.
computeContext
Définit le contexte dans lequel les calculs sont exécutés, spécifiés avec un contexte RxComputeContext valide. Actuellement, les contextes de calcul locaux et RxInSqlServer sont pris en charge.
ensemble
Paramètres de contrôle pour l’apprentissage ensembliste.
...
Arguments supplémentaires à passer directement au moteur de calcul Microsoft.
Détails
rxFastTrees est une implémentation de FastRank. FastRank est une implémentation efficace de l’algorithme de boosting de gradient MART. Le boosting de gradient est une technique d’apprentissage automatique pour les problèmes de régression. Il génère chaque arbre de régression de manière progressive, en utilisant une fonction de perte prédéfinie pour mesurer l'erreur à chaque étape et la corriger à la suivante. Par conséquent, ce modèle de prédiction est en fait un ensemble de modèles de prédiction plus faibles. Dans les problèmes de régression, le boosting génère une série d’arborescences de ce type par étapes, puis sélectionne l’arbre optimal à l’aide d’une fonction de perte dérivable arbitraire.
MART apprend un ensemble d’arbres de régression qui est un arbre de décision dont les feuilles contiennent des valeurs scalaires. Un arbre de décision (ou de régression) est un graphique de flux binaire de forme arborescente où, à chaque nœud intérieur, quelqu'un choisir l’un des deux nœuds enfants vers lesquels continuer, en fonction de la valeur de l'une des caractéristiques de l'entrée. Au niveau de chaque nœud terminal, une valeur est retournée. Dans les nœuds intérieurs, la décision est basée sur le test "x <= v"
, où x
est la valeur de la fonctionnalité dans l'échantillon d'entrée, et v
l'une des valeurs possibles de cette fonctionnalité. Les fonctions qui peuvent être générées par un arbre de régression sont toutes les fonctions de constante successives.
L’ensemble d’arbres est obtenu en calculant à chaque étape un arbre de régression qui est une approximation du gradient de la fonction de perte et en l’ajoutant à l’arbre précédent avec des coefficients qui minimisent la perte du nouvel arbre. La sortie de l'ensemble produit par MART sur une instance donnée est la somme des sorties d'arborescence.
En cas de problème de classification binaire, la sortie est convertie en probabilité à l'aide d'une forme d'étalonnage.
En cas de problème de régression, la sortie est la valeur prédite de la fonction.
En cas de problème de classement, les instances sont classées par la valeur de sortie de l’ensemble.
Si type
est définie sur "regression"
, une version de régression de FastTree est utilisée. Si elle est définie sur "ranking"
, une version de classement de FastTree est utilisée. Dans le cas du classement, les instances doivent être classées sur la sortie de l’ensemble d’arborescence. La seule différence dans les paramètres de ces versions réside dans les paramètres d'étalonnage, qui ne sont nécessaires que pour la classification.
Valeur
rxFastTrees
: un objet rxFastTrees
avec le modèle entraîné.
FastTree
: un objet de spécification d’apprenant de classe maml
pour le formateur d’arborescence rapide.
Notes
Cet algorithme est multithread et tente toujours de charger l’intégralité du jeu de données dans la mémoire.
Auteur(s)
Microsoft Corporation Microsoft Technical Support
Références
Wikipedia: Gradient boosting (Gradient tree boosting)
Greedy function approximation: A gradient boosting machine.
Voir aussi
rxFastForest, rxFastLinear, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.
Exemples
# Estimate a binary classification tree
infert1 <- infert
infert1$isCase = (infert1$case == 1)
treeModel <- rxFastTrees(formula = isCase ~ age + parity + education + spontaneous + induced,
data = infert1)
# Create xdf file with per-instance results using rxPredict
xdfOut <- tempfile(pattern = "scoreOut", fileext = ".xdf")
scoreDS <- rxPredict(treeModel, data = infert1,
extraVarsToWrite = c("isCase", "Score"),
outData = xdfOut)
rxDataStep(scoreDS, numRows = 10)
# Clean-up
file.remove(xdfOut)
######################################################################
# Estimate a regression fast tree
# Use the built-in data set 'airquality' to create test and train data
DF <- airquality[!is.na(airquality$Ozone), ]
DF$Ozone <- as.numeric(DF$Ozone)
randomSplit <- rnorm(nrow(DF))
trainAir <- DF[randomSplit >= 0,]
testAir <- DF[randomSplit < 0,]
airFormula <- Ozone ~ Solar.R + Wind + Temp
# Regression Fast Tree for train data
fastTreeReg <- rxFastTrees(airFormula, type = "regression",
data = trainAir)
# Put score and model variables in data frame
fastTreeScoreDF <- rxPredict(fastTreeReg, data = testAir,
writeModelVars = TRUE)
# Plot actual versus predicted values with smoothed line
rxLinePlot(Score ~ Ozone, type = c("p", "smooth"), data = fastTreeScoreDF)