La régression logistique pour la classification binaire entraîne un classifieur binaire à l'aide de l'algorithme de régression logistique. Ce composant prend en charge les données d'entrée denses et clairsemées, et utilise l'optimiseur L-BFGS (Limited-memory Broyden–Fletcher–Goldfarb–Shanno).
Fonctionnement
L'entraînement se déroule en trois étapes :
Traitement des caractéristiques — L'algorithme lit les colonnes de caractéristiques spécifiées (types DOUBLE ou BIGINT) ainsi que la colonne d'étiquette depuis la table d'entrée. Si les données d'entrée sont au format clairsemé, le composant analyse les paires clé-valeur avant le traitement.
Entraînement — L'algorithme L-BFGS minimise itérativement la fonction de perte. À chaque itération, il met à jour les poids du modèle. L'entraînement s'arrête lorsque l'amélioration de la vraisemblance logarithmique entre deux itérations consécutives est inférieure à
epsilon, ou lorsque le nombre maximal d'itérations est atteint.Prédiction — Le modèle entraîné attribue à chaque ligne une étiquette de classe prédite (
prediction_result), un score de confiance (prediction_score) et une distribution de probabilité sur toutes les classes (prediction_detail).
Configurer le composant
Choisissez l'une des méthodes suivantes.
Méthode 1 : Configuration dans Machine Learning Designer
Ouvrez l'onglet de configuration du pipeline dans Machine Learning Designer, puis définissez les paramètres dans le panneau du composant.
Fields setting
| Paramètre | Description |
|---|---|
| Training feature columns | Colonnes de caractéristiques de la table d'entrée utilisées pour l'entraînement. Prend en charge les types DOUBLE et BIGINT. Maximum de 20 millions de caractéristiques. |
| Target columns | Colonne d'étiquette dans la table d'entrée. |
| Positive class value | Valeur d'étiquette représentant la classe positive dans la classification binaire. |
| Use sparse format | Activez cette option si les données d'entrée sont au format clairsemé. |
Parameters setting
| Paramètre | Description | Par défaut |
|---|---|---|
| Regularization type | Type de régularisation à appliquer pendant l'entraînement. Valeurs valides : None, L1, L2. Consultez Choisir un type de régularisation. | — |
| Maximum iterations | Nombre maximal d'itérations L-BFGS. | 100 |
| Regularization coefficient | Intensité de la régularisation. Sans effet si le paramètre Regularization type est défini sur None. | — |
| Minimum convergence deviance | Seuil de convergence (epsilon). L'entraînement s'arrête lorsque l'amélioration de la vraisemblance logarithmique entre deux itérations est inférieure à cette valeur. |
0,000001 |
Optimisation
| Paramètre | Description |
|---|---|
| Cores | Défini automatiquement par le système. |
| Memory size per core | Défini automatiquement par le système. |
Méthode 2 : Configuration via les commandes PAI
Exécutez la commande PAI suivante via le composant SQL Script.
PAI -name logisticregression_binary
-project algo_public
-DmodelName="xlab_m_logistic_regression_6096"
-DregularizedLevel="1"
-DmaxIter="100"
-DregularizedType="l1"
-Depsilon="0.000001"
-DlabelColName="y"
-DfeatureColNames="pdays,emp_var_rate"
-DgoodValue="1"
-DinputTableName="bank_data"
Paramètres obligatoires
| Paramètre | Description |
|---|---|
inputTableName |
Nom de la table d'entrée. |
labelColName |
Colonne d'étiquette dans la table d'entrée. |
modelName |
Nom du modèle hors ligne en sortie. |
Paramètres facultatifs
| Paramètre | Description | Par défaut |
|---|---|---|
featureColNames |
Colonnes de caractéristiques utilisées pour l'entraînement. Maximum de 20 millions de caractéristiques. | Toutes les colonnes numériques |
inputTablePartitions |
Partitions à utiliser depuis la table d'entrée. Formats : partition_name=value ou name1=value1/name2=value2. Séparez plusieurs partitions par des virgules. |
Table complète |
regularizedType |
Type de régularisation. Valeurs valides : l1, l2, None. |
l1 |
regularizedLevel |
Coefficient de régularisation. Sans effet si regularizedType est défini sur None. |
1.0 |
maxIter |
Nombre maximal d'itérations L-BFGS. | 100 |
epsilon |
Seuil de convergence. L'entraînement s'arrête lorsque l'amélioration de la vraisemblance logarithmique entre deux itérations est inférieure à cette valeur. | 1.0e-06 |
goodValue |
Valeur d'étiquette correspondant à la classe positive. Assignée aléatoirement si non spécifiée. | — |
enableSparse |
Indique si les données d'entrée sont au format clairsemé. Valeurs valides : true, false. |
false |
itemDelimiter |
Délimiteur entre les paires clé-valeur dans les entrées clairsemées. | , (virgule) |
kvDelimiter |
Délimiteur entre les clés et les valeurs dans les entrées clairsemées. | : (deux-points) |
coreNum |
Nombre de cœurs. | Alloué automatiquement |
memSizePerCore |
Taille de la mémoire par cœur, en Mo. | Alloué automatiquement |
Choisir un type de régularisation
| Type de régularisation | Cas d'utilisation | Effet |
|---|---|---|
| L1 (par défaut) | Données de haute dimension avec de nombreuses caractéristiques non pertinentes | Force les coefficients des caractéristiques non pertinentes à zéro, produisant un modèle clairsemé |
| L2 | La plupart des caractéristiques sont pertinentes ; vous souhaitez éviter les coefficients élevés | Réduit tous les coefficients vers zéro sans les éliminer |
| None | Petits ensembles de données ou pour comprendre la ligne de base sans régularisation | Aucune régularisation appliquée ; regularizedLevel est ignoré |
Format des données clairsemées
Lorsque enableSparse est défini sur true, le composant lit chaque cellule comme une chaîne clé-valeur. Les clés sont des index basés sur zéro ; les valeurs doivent être numériques. Des valeurs de clé non numériques provoquent une erreur.
itemDelimitersépare les paires clé-valeur au sein d'une cellule.kvDelimitersépare une clé de sa valeur.
Exemple d'entrée avec les délimiteurs par défaut (, et :) :
| key_value |
|---|
| 1:100,4:200,5:300 |
| 1:10,2:20,3:30 |
Exemple
Cet exemple détaille un flux de travail complet, de l'entraînement à la prédiction, en utilisant un ensemble de données dense.
Étape 1 : Créer la table d'entraînement
DROP TABLE IF EXISTS lr_test_input;
CREATE TABLE lr_test_input AS
SELECT *
FROM (
SELECT CAST(1 AS DOUBLE) AS f0, CAST(0 AS DOUBLE) AS f1, CAST(0 AS DOUBLE) AS f2, CAST(0 AS DOUBLE) AS f3, CAST(0 AS BIGINT) AS label
UNION ALL
SELECT CAST(0 AS DOUBLE), CAST(1 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS BIGINT)
UNION ALL
SELECT CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(1 AS DOUBLE), CAST(0 AS DOUBLE), CAST(1 AS BIGINT)
UNION ALL
SELECT CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(1 AS DOUBLE), CAST(1 AS BIGINT)
UNION ALL
SELECT CAST(1 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS BIGINT)
UNION ALL
SELECT CAST(0 AS DOUBLE), CAST(1 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS DOUBLE), CAST(0 AS BIGINT)
) a;
La table résultante lr_test_input :
| f0 | f1 | f2 | f3 | label |
|---|---|---|---|---|
| 1.0 | 0.0 | 0.0 | 0.0 | 0 |
| 0.0 | 0.0 | 1.0 | 0.0 | 1 |
| 0.0 | 0.0 | 0.0 | 1.0 | 1 |
| 0.0 | 1.0 | 0.0 | 0.0 | 0 |
| 1.0 | 0.0 | 0.0 | 0.0 | 0 |
| 0.0 | 1.0 | 0.0 | 0.0 | 0 |
Étape 2 : Entraîner le modèle
DROP OFFLINEMODEL IF EXISTS lr_test_model;
PAI -name logisticregression_binary
-project algo_public
-DmodelName="lr_test_model"
-DitemDelimiter=","
-DregularizedLevel="1"
-DmaxIter="100"
-DregularizedType="None"
-Depsilon="0.000001"
-DkvDelimiter=":"
-DlabelColName="label"
-DfeatureColNames="f0,f1,f2,f3"
-DenableSparse="false"
-DgoodValue="1"
-DinputTableName="lr_test_input";
Étape 3 : Exécuter la prédiction
Pour plus de détails sur les paramètres du composant Prediction, consultez Prediction.
DROP TABLE IF EXISTS lr_test_prediction_result;
PAI -name prediction
-project algo_public
-DdetailColName="prediction_detail"
-DmodelName="lr_test_model"
-DitemDelimiter=","
-DresultColName="prediction_result"
-Dlifecycle="28"
-DoutputTableName="lr_test_prediction_result"
-DscoreColName="prediction_score"
-DkvDelimiter=":"
-DinputTableName="lr_test_input"
-DenableSparse="false"
-DappendColNames="label";
Étape 4 : Examiner les résultats
La table de sortie lr_test_prediction_result contient :
| label | prediction_result | prediction_score | prediction_detail |
|---|---|---|---|
| 0 | 0 | 0.9999998793434426 | {"0": 0.9999998793434426, "1": 1.206565574533681e-07} |
| 1 | 1 | 0.999999799574135 | {"0": 2.004258650156743e-07, "1": 0.999999799574135} |
| 1 | 1 | 0.999999799574135 | {"0": 2.004258650156743e-07, "1": 0.999999799574135} |
| 0 | 0 | 0.9999998793434426 | {"0": 0.9999998793434426, "1": 1.206565574533681e-07} |
| 0 | 0 | 0.9999998793434426 | {"0": 0.9999998793434426, "1": 1.206565574533681e-07} |
| 0 | 0 | 0.9999998793434426 | {"0": 0.9999998793434426, "1": 1.206565574533681e-07} |
Colonnes de sortie :
prediction_result— l'étiquette de classe prédite (0 ou 1)prediction_score— la probabilité de la classe préditeprediction_detail— distribution de probabilité sur toutes les classes sous forme d'objet JSON
Toutes les prédictions correspondent aux étiquettes réelles, avec des scores de confiance supérieurs à 0,9999.