Megosztás a következőn keresztül:


Köztes adatok vizsgálata a feldolgozás során

Megtudhatja, hogyan vizsgálhatja meg a köztes adatokat a ML.NET betöltési, feldolgozási és modellbetanítási lépései során. A köztes adatok a gépi tanulási folyamat egyes szakaszainak kimenetei.

Az alábbihoz hasonló köztes adatok, amelyeket betöltenek egy IDataView rendszerbe, különböző módokon vizsgálhatók 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
    }
};

IDataView átalakítása IEnumerable-vé

Az egyik leggyorsabb módja annak, hogy vizsgálja meg az egyik IDataView , hogy átalakítsa azt egy IEnumerable. A metódus használatára CreateEnumerable való IEnumerable konvertáláshozIDataView.

A teljesítmény optimalizálásához állítsa be a következőt reuseRowObjecttrue: . Ezzel lustán feltölti ugyanazt az objektumot a kiértékelendő aktuális sor adataival, nem pedig új objektumot hoz létre az adathalmaz minden egyes sorához.

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

Adott indexek elérése az IEnumerable használatával

Ha csak az adatok vagy adott indexek egy részére van szüksége, használja CreateEnumerable és állítsa be a reuseRowObject paraméter értékét úgy, hogy false az adathalmaz minden egyes kért sorához létrejön egy új objektum. Ezután konvertálja a IEnumerable tömböt vagy listát.

Figyelmeztetés

Ha tömbre vagy listára konvertálja az eredményt CreateEnumerable , az összes kért IDataView sort betölti a memóriába, ami hatással lehet a teljesítményre.

A gyűjtemény létrehozása után műveleteket hajthat végre az adatokon. Az alábbi kódrészlet az adathalmaz első három sorát veszi figyelembe, és kiszámítja az átlagos aktuális árat.

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

Értékek vizsgálata egyetlen oszlopban

A modellkészítési folyamat bármely pontján egy oszlop értékei IDataView elérhetők a GetColumn módszerrel. A GetColumn metódus egy oszlopban lévő összes értéket visszaadja .IEnumerable

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

Az IDataView értékeinek vizsgálata egyszerre egy sorban

IDataView lazily kiértékelésre kerül. Ha a dokumentum előző szakaszaiban bemutatottak szerint nem szeretne áttérni IEnumerable egy sorraIDataView, hozzon létre egy DataViewRowCursor metódustGetRowCursor, és adja át paraméterként a DataViewSchemaIDataView paraméterét. Ezután a sorok közötti iteráláshoz használja a MoveNext kurzormetódust ValueGetter és a meghatalmazottakat a megfelelő értékek kinyeréséhez az egyes oszlopokból.

Fontos

Teljesítmény szempontjából a ML.NET vektorok natív gyűjteménytípusok (azaz Vector,float[]) helyett használhatókVBuffer.

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

Előzetes feldolgozás vagy betanítás előzetes eredménye az adatok egy részhalmazán

Figyelmeztetés

Ne használja Preview az éles kódban, mert hibakeresésre szolgál, és csökkentheti a teljesítményt.

A modellkészítési folyamat kísérleti és iteratív. Az adatok előzetes feldolgozása vagy gépi tanulási modell betanítása után az adatok egy részhalmazára vonatkozó előnézet megtekintéséhez használja a Preview visszaadott metódust DataDebuggerPreview. Az eredmény egy olyan objektum ColumnView és RowView tulajdonság, amely egy adott oszlop vagy sor értékeit IEnumerable tartalmazza. Adja meg, hogy hány sorra alkalmazza az átalakítást a maxRows paraméterrel.

Data Debugger Preview Object

A vizsgálat IDataView eredménye a következőhöz hasonló:

Data Debugger Preview Row View