Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara memeriksa data perantara selama pemuatan, pemrosesan, dan langkah-langkah pelatihan model dalam ML.NET. Data perantara adalah output dari setiap tahap dalam alur pembelajaran mesin.
Data perantara seperti yang diwakili di bawah ini yang dimuat ke dalam IDataView dapat diperiksa dengan berbagai cara dalam 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
}
};
Mengonversi IDataView ke IEnumerable
Salah satu cara tercepat untuk memeriksa IDataView adalah dengan mengonversinya menjadi IEnumerable. Untuk mengonversi IDataView untuk IEnumerable menggunakan CreateEnumerable metode .
Untuk mengoptimalkan performa, atur reuseRowObject ke true. Melakukannya akan dengan malas mengisi objek yang sama dengan data baris saat ini karena sedang dievaluasi dibandingkan dengan membuat objek baru untuk setiap baris dalam himpunan data.
// 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);
}
Mengakses indeks tertentu dengan IEnumerable
Jika Anda hanya memerlukan akses ke sebagian data atau indeks tertentu, gunakan CreateEnumerable dan atur reuseRowObject nilai parameter ke false sehingga objek baru dibuat untuk setiap baris yang diminta dalam himpunan data. Kemudian, konversikan IEnumerable ke array atau daftar.
Peringatan
Mengonversi hasil ke CreateEnumerable array atau daftar akan memuat semua baris yang diminta IDataView ke dalam memori yang dapat memengaruhi performa.
Setelah koleksi dibuat, Anda dapat melakukan operasi pada data. Cuplikan kode di bawah ini mengambil tiga baris pertama dalam himpunan data dan menghitung harga rata-rata saat ini.
// 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;
Memeriksa nilai dalam satu kolom
Pada titik mana pun dalam proses pembuatan model, nilai dalam satu kolom IDataView dapat diakses menggunakan metode .GetColumn Metode mengembalikan GetColumn semua nilai dalam satu kolom sebagai IEnumerable.
IEnumerable<float> sizeColumn = data.GetColumn<float>("Size").ToList();
Memeriksa nilai IDataView satu baris dalam satu waktu
IDataView dievaluasi dengan malas. Untuk melakukan iterasi di atas baris IDataView tanpa mengonversi ke seperti yang IEnumerable ditunjukkan di bagian sebelumnya dari dokumen ini, buat DataViewRowCursor dengan menggunakan GetRowCursor metode dan meneruskan DataViewSchema Anda IDataView sebagai parameter. Kemudian, untuk melakukan iterasi di atas baris, gunakan MoveNext metode kursor bersama dengan ValueGetter delegasi untuk mengekstrak nilai masing-masing dari setiap kolom.
Penting
Untuk tujuan performa, vektor dalam ML.NET menggunakan VBuffer alih-alih jenis koleksi asli (yaitu, 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);
}
}
Pratinjau hasil pra-pemrosesan atau pelatihan pada subset data
Peringatan
Jangan gunakan Preview dalam kode produksi karena ditujukan untuk penelusuran kesalahan dan dapat mengurangi performa.
Proses pembuatan model bersifat eksperimental dan berulang. Untuk mempratinjau tampilan data setelah pra-pemrosesan atau melatih model pembelajaran mesin pada subset data, gunakan Preview metode yang mengembalikan DataDebuggerPreview. Hasilnya adalah objek dengan ColumnView properti dan RowView yang merupakan dan IEnumerable berisi nilai dalam kolom atau baris tertentu. Tentukan jumlah baris untuk menerapkan transformasi dengan maxRows parameter .

Hasil pemeriksaan IDataView akan terlihat mirip dengan yang berikut ini:
