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 Vector
gezegd, , 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.
Het resultaat van het inspecteren van een IDataView
exemplaar ziet er ongeveer als volgt uit: