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 :
1hdf_input = hdf.add_id(id_col='ID') 1hdf_input.head(5).collect()| ID | MedInc | HouseAge | AveRooms | AveBedrms | Population | AveOccup | Latitude | Longitude | Cible | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1.24 | 52.0 | 2.92 | 0.91 | 396.0 | 4.65 | 37.80 | -122.27 | 5.00 |
| 1 | 2 | 1.16 | 52.0 | 2.43 | 0.94 | 1349.0 | 5.39 | 37.87 | -122.25 | 5.00 |
| 2 | 3 | 7.85 | 52.0 | 7.79 | 1.05 | 517.0 | 2.41 | 37.86 | -122.24 | 5.00 |
| 3 | 4 | 9.39 | 52.0 | 7.51 | 0.95 | 1366.0 | 2.75 | 37.85 | -122.24 | 5.00 |
| 4 | 5 | 7.87 | 52.0 | 8.28 | 1.04 | 947.0 | 2.62 | 37.83 | -122.23 | 5.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 :
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 :
123456789101112HybridGradientBoostingRegressor
%%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".
1hgr.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()| VARIABLE_NAME | IMPORTANCE | |
|---|---|---|
| 0 | MedInc | 0.513025 |
| 1 | ID | 0.230721 |
| 2 | Latitude | 0.097631 |
| 3 | AveOccup | 0.085743 |
| 4 | Longitude | 0.057718 |
| 5 | AveRooms | 0.011069 |
| 6 | HouseAge | 0.004093 |
| 7 | AveBedrms | 0,000000 |
| 8 | Population | 0,000000 |
Références
[1] Package d'algorithme SAP hana_ml.algorithms.pal : HybridGradientBoostingRegressor