Entraînement d'un modèle de régression avec SAP HANA PAL

Objective

After completing this lesson, you will be able to explorez les fonctionnalités de l'algorithme HGBT (Hybrid Gradient Boosting Tree) pour la régression.

Entraîner un modèle de régression PAL pour les prix des maisons

Le client d'apprentissage automatique Python pour SAP HANA (hana-ml) permet d'accéder aux éléments suivants :

  • Toutes les fonctions de la bibliothèque d'analyses prédictives (PAL)
  • Fonctions Automated Predictive Library (APL) dans Python

Ces fonctions peuvent être utilisées avec les DataFrames SAP HANA comme données de saisie.

Préparation du jeu de données d'entrée

L'algorithme partitionne un jeu de données d'entrée de manière aléatoire en trois sous-ensembles disjoints : entraînement, test et validation. Ces sous-ensembles sont essentiels pour l'exécution du workflow d'apprentissage automatique.

Notez que le jeu de données d'entrée doit inclure une colonne "ID" pour créer ces partitions, comme requis par l'algorithme de partitionnement [1]. Si la colonne "ID" n'est pas explicitement spécifiée, l'algorithme suppose que la première colonne du DataFrame contient l'"ID". Pour plus de détails, voir [1].

Voici la procédure à suivre pour insérer la colonne « ID » dans le jeu de données :

Python
1
hdf_input = hdf.add_id(id_col='ID')
Python
1
hdf_input.head(5).collect()
Résultat :
 IDMedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeCible
011.2452.02.920.91396.04.6537.80-122.275.00
121.1652.02.430.941349.05.3937.87-122.255.00
237.8552.07.791.05517.02.4137.86-122.245.00
349.3952.07.510.951366.02.7537.85-122.245.00
457.8752.08.281.04947.02.6237.83-122.235.00

Partitionnement du jeu de données d'entrée

Il n'existe pas de pourcentage de partition optimal pour chacun des sous-ensembles ci-dessus. Vous devez sélectionner un pourcentage de partition qui répond aux objectifs du projet prédictif.

Par exemple, les pourcentages de partition courants incluent :

  • Formation : 80 % / Test : 20 %
  • Formation : 70 % / Test : 30 %
  • Formation : 60 % / Test : 40 %

Dans ce cas particulier, vous devrez maximiser la quantité de données pour entraîner le modèle et laisser suffisamment de points de données pour une évaluation de modèle robuste. Par conséquent, le fractionnement des données proposé est le suivant :

Formation : 70 % / Test : 30 %

Les paramètres d'entrée pour l'algorithme de partitionnement sont fournis ci-dessous :

Python
12345678
# Partitioning the input data into train, test, validation sub-sets from hana_ml.algorithms.pal.partition import train_test_val_split regressdata_hdf=hdf_input.select('ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target') train_hdf, test_hdf, val_hdf = train_test_val_split(data=regressdata_hdf, id_column='ID', random_seed=2, partition_method='random', training_percentage = 0.7, testing_percentage = 0.3, validation_percentage = 0.0) print(regressdata_hdf.select_statement)

Sortie :

SELECT "ID", "MedInc", "HouseAge", "AveRooms", "AveBedrms", "Population", "AveOccup", "Latitude", "Longitude", "Target" FROM (SELECT CAST(ROW_NUMBER() OVER() AS INTEGER) + 0 AS "ID", * FROM (SELECT * FROM "ML_DEMO") + 0 AS "ID", * (SELECT * FROM "ML_DEMO".california_housing") AS "DT_269"

Entraîner un modèle HGBT (gradient boosting) hybride

L'algorithme HGBT (gradient boosting tree) hybride PAL [1] est une implémentation d'arbre gradient boosting optimisée par HANA prenant en charge les types de fonctionnalités mixtes (continues et catégoriques) comme entrée. Il prend en charge les scénarios de régression et de classification.

Le modèle de gradient boosting hybride pour la régression est entraîné en fonction du sous-ensemble d'entraînement indiqué ci-dessous :

Code Snippet
123456789101112
HybridGradientBoostingRegressor %%time hgr = HybridGradientBoostingRegressor( n_estimators = 20, split_threshold=0.75, split_method = 'exact', learning_rate=0.3, max_depth=2, resampling_method = 'cv', fold_num=5, evaluation_metric = 'rmse', ref_metric=['mae'] ) hgr.fit(train_hdf, features=['ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target')

Temps CPU : utilisateur 4,81 ms, système : 408 μs, total : 5,22 ms

Temps du mur: 633 ms

Résultat :

<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor at 0x7fe3333e9510>

Références

[1] Algorithme SAP hana_ml.algorithms.pal package:HybridGradientBoostingRegressor

Importance de la fonctionnalité

L'importance de la fonctionnalité affecte un score aux fonctions d'entrée en fonction de leur contribution à la prévision de la réponse ou de la variable dépendante [1].

Plus le score d'une fonctionnalité est élevé, plus elle a d'influence sur le modèle pour prédire la variable cible. Les scores d'importance se situent dans la plage [0, 1].

Voici comment l'importance de la fonctionnalité du modèle peut être vérifiée :

On observe que la caractéristique la plus influente est 'MedInc', avec une valeur d'importance de '0.51'. Cette caractéristique représente le revenu médian dans un groupe de blocs. "Un groupe de blocs est la plus petite unité géographique pour laquelle les États-Unis. Census Bureau publie des exemples de données » [2].

En outre, dans les positions trois et cinq, nous trouvons les caractéristiques 'Latitude' et 'Longitude', respectivement. Leurs valeurs d'importance respectives sont "0,09" et "0,05".

Python
1
hgr.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()
 VARIABLE_NAMEIMPORTANCE
0MedInc0.513025
1ID0.230721
2Latitude0.097631
3AveOccup0.085743
4Longitude0.057718
5AveRooms0.011069
6HouseAge0.004093
7AveBedrms0,000000
8Population0,000000

Références

[1] Package d'algorithme SAP hana_ml.algorithms.pal : HybridGradientBoostingRegressor

[2] Description de l'ensemble de données California Housing