Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Naučte se kontrolovat zprostředkující data během načítání, zpracování a trénování modelů v ML.NET. Průběžná data jsou výstupem každé fáze v kanálu strojového učení.
Vezměte v úvahu následující data o bydlení:
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
}
};
V ML.NET můžete zkontrolovat zprostředkující data, jako je tato, která jsou načtena do IDataView různými způsoby, jak je popsáno v následujících částech.
Převod IDataView na IEnumerable
Jedním z nejrychlejších způsobů, jak zkontrolovat, IDataView je převést ho na .IEnumerable K tomuto převodu použijte metodu CreateEnumerable.
Pokud chcete optimalizovat výkon, nastavte reuseRowObject hodnotu true. Tímto způsobem se stejný objekt líně naplní daty aktuálního řádku místo toho, aby se pro každý řádek v datové sadě vytvořil nový objekt.
// 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);
}
Přístup ke konkrétním indexům pomocí IEnumerable
Pokud potřebujete přístup jenom k části dat nebo konkrétních indexů, použijte CreateEnumerable a nastavte hodnotu parametru reuseRowObject tak, aby false se pro každý požadovaný řádek v datové sadě vytvořil nový objekt. Potom převeďte pole IEnumerable nebo seznam.
Upozorňující
Převod výsledku CreateEnumerable do pole nebo seznamu načte do paměti všechny požadované řádky IDataView, což může mít vliv na výkon.
Po vytvoření kolekce můžete s daty provádět operace. Následující fragment kódu vezme první tři řádky v datové sadě a vypočítá průměrnou aktuální cenu.
// 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;
Kontrola hodnot v jednom sloupci
V jakémkoli okamžiku procesu sestavování modelu je možné pomocí metody získat IDataView přístup k hodnotám v jednom sloupci GetColumn modelu. Metoda GetColumn vrátí všechny hodnoty v jednom sloupci jako IEnumerable.
IEnumerable<float> sizeColumn = data.GetColumn<float>("Size").ToList();
Kontrola hodnot IDataView po jednom řádku
IDataView je lazičně vyhodnocen. Chcete-li iterovat přes řádky IDataView bez převodu na tak IEnumerable , jak je znázorněno v předchozích částech tohoto dokumentu, vytvořte DataViewRowCursor pomocí GetRowCursor metody a předání DataViewSchema vašeho IDataView jako parametru. Pak k iteraci přes řádky použijte metodu MoveNext kurzoru spolu s ValueGetter delegáty k extrahování příslušných hodnot z každého sloupce.
Důležité
Pro účely výkonu používají vektory v ML.NET místo nativních typů kolekcí VBuffer (to znamená Vector a 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);
}
}
Náhled výsledku předběžného zpracování nebo trénování pro podmnožinu dat
Upozorňující
Nepoužívejte Preview v produkčním kódu, protože je určený pro ladění a může snížit výkon.
Proces vytváření modelu je experimentální a iterativní. Pokud chcete zobrazit náhled toho, jaká data by vypadala po předběžném zpracování nebo trénování modelu strojového učení na podmnožině dat, použijte metodu Preview, která vrací DataDebuggerPreview. Výsledkem je objekt s vlastnostmi ColumnView a RowView, které jsou IEnumerable a obsahují hodnoty v určitém sloupci nebo řádku. Zadejte počet řádků, na které se má transformace použít s parametrem maxRows .
Výsledek kontroly IDataView vypadá podobně jako na následujícím obrázku: