Delen via


Tussenliggende gegevens controleren tijdens de verwerking

Informatie over het inspecteren van tussenliggende gegevens tijdens het laden, verwerken en modeltraining in ML.NET. Tussenliggende gegevens zijn de uitvoer van elke fase in de machine learning-pijplijn.

Tussenliggende gegevens, zoals de gegevens die hieronder worden weergegeven, kunnen op verschillende manieren in ML.NET worden geïnspecteerd IDataView .

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
    }
};

IDataView converteren naar IEnumerable

Een van de snelste manieren om een te IDataView inspecteren is door deze te converteren naar een IEnumerable. Als u een IDataView wilt converteren om de CreateEnumerable methode te IEnumerable gebruiken.

Als u de prestaties wilt optimaliseren, stelt u deze in reuseRowObject op true. Als u dit doet, wordt hetzelfde object lui gevuld met de gegevens van de huidige rij, omdat het wordt geëvalueerd in plaats van een nieuw object te maken voor elke rij in de gegevensset.

// 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);
}

Toegang tot specifieke indexen met IEnumerable

Als u alleen toegang nodig hebt tot een deel van de gegevens of specifieke indexen, gebruikt CreateEnumerable u de parameterwaarde en stelt u deze reuseRowObject in op false zodat er een nieuw object wordt gemaakt voor elk van de aangevraagde rijen in de gegevensset. Converteer vervolgens de IEnumerable naar een matrix of lijst.

Waarschuwing

Als u het resultaat CreateEnumerable converteert naar een matrix of lijst, worden alle aangevraagde IDataView rijen in het geheugen geladen die van invloed kunnen zijn op de prestaties.

Zodra de verzameling is gemaakt, kunt u bewerkingen uitvoeren op de gegevens. Het onderstaande codefragment neemt de eerste drie rijen in de gegevensset en berekent de gemiddelde huidige prijs.

// 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;

Waarden in één kolom controleren

Op elk moment in het modelbouwproces kunnen waarden in één kolom van een model IDataView worden geopend met behulp van de GetColumn methode. De GetColumn methode retourneert alle waarden in één kolom als een IEnumerable.

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

IDataView-waarden één rij tegelijk inspecteren

IDataView wordt lazily geëvalueerd. Als u de rijen van een document IDataView wilt herhalen zonder te converteren naar een IEnumerable zoals wordt weergegeven in eerdere secties van dit document, maakt u een DataViewRowCursor met behulp van de GetRowCursor methode en geeft u het DataViewSchema van uw IDataView als parameter door. Als u vervolgens rijen wilt herhalen, gebruikt u de MoveNext cursormethode samen met ValueGetter gemachtigden om de respectieve waarden uit elk van de kolommen te extraheren.

Belangrijk

Voor prestatiedoeleinden worden vectoren in ML.NET gebruikt VBuffer in plaats van systeemeigen verzamelingstypen (dat wil Vectorgezegd, , 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);
    }
}

Voorbeeldresultaat van voorverwerking of training op een subset van de gegevens

Waarschuwing

Gebruik niet Preview in productiecode omdat deze is bedoeld voor foutopsporing en de prestaties kan verminderen.

Het modelbouwproces is experimenteel en iteratief. Als u een voorbeeld wilt bekijken van hoe gegevens eruit zouden zien na het vooraf verwerken of trainen van een machine learning-model op een subset van de gegevens, gebruikt u de Preview methode die een DataDebuggerPreview. Het resultaat is een object met ColumnView en RowView eigenschappen die zowel een IEnumerable als de waarden in een bepaalde kolom of rij bevatten. Geef het aantal rijen op waarop de transformatie moet worden toegepast met de maxRows parameter.

Voorbeeldobject voor gegevensopsporingsprogramma

Het resultaat van het inspecteren van een IDataView exemplaar ziet er ongeveer als volgt uit:

Voorbeeldrijweergave van gegevensopsporingsprogramma