microsoftml.rx_fast_forest : forêt aléatoire
Usage
microsoftml.rx_fast_forest(formula: str,
data: [revoscalepy.datasource.RxDataSource.RxDataSource,
pandas.core.frame.DataFrame], method: ['binary',
'regression'] = 'binary', num_trees: int = 100,
num_leaves: int = 20, min_split: int = 10,
example_fraction: float = 0.7, feature_fraction: float = 1,
split_fraction: float = 1, num_bins: int = 255,
first_use_penalty: float = 0, gain_conf_level: float = 0,
train_threads: int = 8, random_seed: int = None,
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
Machine Learning forêt rapide
Détails
Les arbres de décision sont des modèles non paramétriques qui exécutent une séquence de tests simples sur les entrées. Cette procédure de décision les mappe sur les résultats trouvés dans le jeu de données d’apprentissage dont les entrées étaient similaires à l’instance en cours de traitement. Une décision est prise sur chaque nœud de la structure de données de l’arborescence binaire en fonction d’une mesure de similarité qui mappe chaque instance de manière récursive dans les branches de l’arborescence jusqu’à ce que le nœud terminal approprié soit atteint et que la décision de sortie soit retournée.
Les arbres de décision présentent plusieurs avantages :
Ils sont efficaces en matière de calcul et d’utilisation de la mémoire, lors de la formation et de la prédiction.
Ils peuvent représenter des limites de décisions non linéaires.
Ils sélectionnent et classifient les fonctionnalités intégrées.
Ils sont résilients en cas de fonctionnalités bruyantes.
La régression rapide de forêt est une implémentation de forêt aléatoire et de forêt de régression quantile à l’aide de l’apprentissage de l’arbre de régression dans rx_fast_trees
.
Ce modèle se compose d’un ensemble d’arbres de décision. Chaque arbre d’une forêt de décision génère une distribution gaussienne, sous la forme d’une prédiction. Une agrégation est effectuée sur l’ensemble des arbres, afin de trouver la distribution gaussienne la plus proche de la distribution combinée, pour tous les arbres du modèle.
Ce classifieur de forêt décisionnelle se compose d'un ensemble d'arbres de décision. En général, les modèles ensemblistes offrent une meilleure couverture et une précision plus élevée que les arbres de décision uniques. Chaque arbre d’une forêt de décision génère une distribution gaussienne.
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.
method
Chaîne de caractères indiquant un type FastTree :
"binary"
pour la classification binaire par défaut de FastTree ou"regression"
pour une régression FastTree.
num_trees
Spécifie le nombre total d’arbres de décision à créer dans l’ensemble. En créant d’autres arbres de décision, vous pouvez obtenir une meilleure couverture, mais le temps d’apprentissage augmente. La valeur par défaut est 100.
num_leaves
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.
min_split
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.
example_fraction
Fraction d’instances choisies de façon aléatoire à utiliser pour chaque arborescence. La valeur par défaut est 0,7.
feature_fraction
Fraction de caractéristiques choisies de façon aléatoire à utiliser pour chaque arborescence. La valeur par défaut est 0,7.
split_fraction
Fraction de caractéristiques choisies de façon aléatoire à utiliser pour chaque fractionnement. La valeur par défaut est 0,7.
num_bins
Nombre maximal de valeurs distinctes (emplacements) par fonctionnalité. La valeur par défaut est 255.
first_use_penalty
La caractéristique utilise tout d’abord le coefficient de pénalité. La valeur par défaut est 0.
gain_conf_level
L’exigence de confiance de gain de l’arbre (doit être comprise dans la plage [0,1]
). La valeur par défaut est 0.
train_threads
Nombre de threads à utiliser pour l’apprentissage. Si aucune valeur n’est définie, le nombre de threads utilisés est déterminé en interne. La valeur par défaut est Aucun.
random_seed
Spécifie la valeur de départ aléatoire. La valeur par défaut est Aucun.
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 variableold
estTrue
.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
utilise uniquement les observations dans lesquelles la valeur de la variableage
est comprise entre 20 et 65, et la valeurlog
de la variableincome
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 RxComputeContext
valide.
Actuellement, les contextes de calcul locaux et RxInSqlServer
sont pris en charge.
ensemble
Paramètres de contrôle pour l’apprentissage ensembliste.
Retours
Objet FastForest
avec le modèle entraîné.
Notes
Cet algorithme est multithread et tente toujours de charger l’intégralité du jeu de données dans la mémoire.
Voir aussi
Références
Des souches aux arborescences jusqu’aux forêts
Exemple de classification binaire
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_forest, 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_forest(
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))
Sortie :
Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Processed 186 instances
Binning and forming Feature objects
Reserved memory for tree learner: 7176 bytes
Starting to train ...
Not training a calibrator because a valid calibrator trainer was not provided.
Elapsed time: 00:00:00.2704185
Elapsed time: 00:00:00.0443884
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0253862
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
isCase PredictedLabel Score
0 False False -36.205067
1 True False -40.396084
2 False False -33.242531
3 False False -87.212494
4 True False -13.100666
Exemple de régression
'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_forest, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
airquality = get_dataset("airquality")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
airquality = airquality.as_df()
######################################################################
# Estimate a regression fast forest
# Use the built-in data set 'airquality' to create test and train data
df = airquality[airquality.Ozone.notnull()]
df["Ozone"] = df.Ozone.astype(float)
data_train, data_test, y_train, y_test = train_test_split(df, df.Ozone)
airFormula = " Ozone ~ Solar_R + Wind + Temp "
# Regression Fast Forest for train data
ff_reg = rx_fast_forest(airFormula, method="regression", data=data_train)
# Put score and model variables in data frame
score_df = rx_predict(ff_reg, data=data_test, write_model_vars=True)
print(score_df.head())
# Plot actual versus predicted values with smoothed line
# Supported in the next version.
# rx_line_plot(" Score ~ Ozone ", type=["p", "smooth"], data=score_df)
Sortie :
Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 87, Read Time: 0, Transform Time: 0
Beginning processing data.
Warning: Skipped 4 instances with missing features during training
Processed 83 instances
Binning and forming Feature objects
Reserved memory for tree learner: 21372 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0644269
Elapsed time: 00:00:00.0109290
Beginning processing data.
Rows Read: 29, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0314390
Finished writing 29 rows.
Writing completed.
Solar_R Wind Temp Score
0 190.0 7.4 67.0 26.296144
1 20.0 16.6 63.0 14.274153
2 320.0 16.6 73.0 23.421144
3 187.0 5.1 87.0 80.662109
4 175.0 7.4 89.0 67.570549