Partager via


Inspecter les données intermédiaires pendant le traitement

Découvrez comment inspecter les données intermédiaires pendant les étapes de chargement, de traitement et d’entraînement du modèle dans ML.NET. Les données intermédiaires sont les résultats de chaque étape dans le pipeline Machine Learning.

Les données intermédiaires comme celles représentées ci-dessous, qui sont chargées dans un IDataView, peuvent être inspectées de plusieurs façons dans ML.NET.

HousingData[] housingData = new HousingData[]
{
    new HousingData
    {
        Size = 600f,
        HistoricalPrices = new float[] { 100000f ,125000f ,122000f },
        CurrentPrice = 170000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 200000f, 250000f, 230000f },
        CurrentPrice = 225000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 126000f, 130000f, 200000f },
        CurrentPrice = 195000f
    },
    new HousingData
    {
        Size = 850f,
        HistoricalPrices = new float[] { 150000f,175000f,210000f },
        CurrentPrice = 205000f
    },
    new HousingData
    {
        Size = 900f,
        HistoricalPrices = new float[] { 155000f, 190000f, 220000f },
        CurrentPrice = 210000f
    },
    new HousingData
    {
        Size = 550f,
        HistoricalPrices = new float[] { 99000f, 98000f, 130000f },
        CurrentPrice = 180000f
    }
};

Convertir IDataView en IEnumerable

Un des moyens les plus rapides pour inspecter un IDataView consiste à le convertir en un IEnumerable. Pour convertir un IDataView en IEnumerable, utilisez la méthode CreateEnumerable.

Pour optimiser les performances, définissez reuseRowObject sur true. Cette opération remplit tardivement le même objet avec les données de la ligne actuelle au moment de son évaluation, par opposition à la création d’un objet pour chaque ligne dans le jeu de données.

// Create an IEnumerable of HousingData objects from IDataView
IEnumerable<HousingData> housingDataEnumerable =
    mlContext.Data.CreateEnumerable<HousingData>(data, reuseRowObject: true);

// Iterate over each row
foreach (HousingData row in housingDataEnumerable)
{
    // Do something (print out Size property) with current Housing Data object being evaluated
    Console.WriteLine(row.Size);
}

Accès à des index spécifiques avec IEnumerable

Si vous devez uniquement accéder à une partie des données ou à des index spécifiques, utilisez CreateEnumerable et définissez la valeur du paramètre reuseRowObject sur false afin qu’un objet soit créé pour chaque ligne demandée dans le jeu de données. Convertissez ensuite le IEnumerable en tableau ou liste.

Avertissement

La conversion du résultat de CreateEnumerable en tableau ou liste charge en mémoire toutes les lignes IDataView demandées, ce qui peut affecter les performances.

Une fois la collection créée, vous pouvez effectuer des opérations sur les données. L’extrait de code ci-dessous prend les trois premières lignes du jeu de données et calcule le prix moyen actuel.

// Create an Array of HousingData objects from IDataView
HousingData[] housingDataArray =
    mlContext.Data.CreateEnumerable<HousingData>(data, reuseRowObject: false)
        .Take(3)
        .ToArray();

// Calculate Average CurrentPrice of First Three Elements
HousingData firstRow = housingDataArray[0];
HousingData secondRow = housingDataArray[1];
HousingData thirdRow = housingDataArray[2];
float averageCurrentPrice = (firstRow.CurrentPrice + secondRow.CurrentPrice + thirdRow.CurrentPrice) / 3;

Inspecter les valeurs d’une colonne spécifique

À n’importe quel point du processus de génération de modèle, les valeurs d’une colonne spécifique d’un IDataView sont accessibles à l’aide de la méthode GetColumn. La méthode GetColumn retourne toutes les valeurs d’une colonne spécifique sous la forme d’un IEnumerable.

IEnumerable<float> sizeColumn = data.GetColumn<float>("Size").ToList();

Inspecter les valeurs d’IDataView une ligne à la fois

IDataView est évalué tardivement. Pour effectuer une itération sur les lignes d’un IDataView sans opérer de conversion en IEnumerable comme illustré dans les sections précédentes de ce document, créez un DataViewRowCursor en utilisant la méthode GetRowCursor et en passant le DataViewSchema de votre IDataView comme paramètre. Ensuite, pour effectuer une itération sur les lignes, utilisez la méthode de curseur MoveNext avec des délégués ValueGetter pour extraire les valeurs respectives de chacune des colonnes.

Important

À des fins de performances, les vecteurs dans ML.NET utiliser VBuffer au lieu de types de collection natifs (autrement dit, Vector, float[]).

// Get DataViewSchema of IDataView
DataViewSchema columns = data.Schema;

// Create DataViewCursor
using (DataViewRowCursor cursor = data.GetRowCursor(columns))
{
    // Define variables where extracted values will be stored to
    float size = default;
    VBuffer<float> historicalPrices = default;
    float currentPrice = default;

    // Define delegates for extracting values from columns
    ValueGetter<float> sizeDelegate = cursor.GetGetter<float>(columns[0]);
    ValueGetter<VBuffer<float>> historicalPriceDelegate = cursor.GetGetter<VBuffer<float>>(columns[1]);
    ValueGetter<float> currentPriceDelegate = cursor.GetGetter<float>(columns[2]);

    // Iterate over each row
    while (cursor.MoveNext())
    {
        //Get values from respective columns
        sizeDelegate.Invoke(ref size);
        historicalPriceDelegate.Invoke(ref historicalPrices);
        currentPriceDelegate.Invoke(ref currentPrice);
    }
}

Obtenir un aperçu du résultat du prétraitement ou de l’entraînement sur un sous-ensemble des données

Avertissement

N’utilisez pas Preview dans le code de production, car celui-ci est destiné au débogage et peut réduire les performances.

Le processus de génération de modèle est expérimental et itératif. Pour obtenir un aperçu de ce à quoi ressembleraient les données après le prétraitement ou l’entraînement d’un modèle Machine Learning sur un sous-ensemble des données, utilisez la méthode Preview, qui retourne un DataDebuggerPreview. Le résultat est un objet avec des propriétés ColumnView et RowView qui sont toutes deux un IEnumerable et contiennent les valeurs dans une ligne ou une colonne particulière. Spécifiez le nombre de lignes auxquelles appliquer la transformation à l’aide du paramètre maxRows.

Débogueur de données : aperçu de l’objet

Le résultat de l’inspection d’un IDataView devrait être semblable à ce qui suit :

Débogueur de données : aperçu de la vue de ligne