İşleme sırasında ara verileri inceleme

ML.NET'da yükleme, işleme ve model eğitim adımları sırasında ara verileri incelemeyi öğrenin. Ara veriler, makine öğrenmesi işlem hattındaki her aşamanın çıkışıdır.

Aşağıda temsil edilen gibi bir içine IDataView yüklenen ara veriler ML.NET çeşitli yollarla incelenebilir.

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'ı IEnumerable'a Dönüştürme

'yi incelemenin IDataView en hızlı yollarından biri, bunu öğesine IEnumerabledönüştürmektir. yöntemini kullanmak CreateEnumerable üzere dönüştürmek IDataView içinIEnumerable.

Performansı iyileştirmek için olarak trueayarlayınreuseRowObject. Bunu yaptığınızda, veri kümesindeki her satır için yeni bir nesne oluşturmanın aksine, aynı nesne geçerli satırın verileriyle birlikte doldurulur.

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

IEnumerable ile belirli dizinlere erişme

Verilerin yalnızca bir bölümüne veya belirli dizinlere erişmeniz gerekiyorsa, veri kümesinde istenen her satır için yeni bir nesne oluşturulacak şekilde parametre değerini false kullanın CreateEnumerable ve olarak ayarlayınreuseRowObject. Ardından, öğesini IEnumerable bir diziye veya listeye dönüştürün.

Uyarı

sonucunun CreateEnumerable bir diziye veya listeye dönüştürülmesi, istenen IDataView tüm satırları belleğe yükler ve bu da performansı etkileyebilir.

Koleksiyon oluşturulduktan sonra veriler üzerinde işlemler gerçekleştirebilirsiniz. Aşağıdaki kod parçacığı veri kümesindeki ilk üç satırı alır ve ortalama geçerli fiyatı hesaplar.

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

Tek bir sütundaki değerleri inceleme

Model oluşturma işleminin herhangi bir noktasında, yöntemini kullanarak bir IDataView öğesinin tek bir sütunundaki değerlere GetColumn erişilebilir. yöntemi, GetColumn tek bir sütundaki tüm değerleri olarak IEnumerabledöndürür.

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

IDataView değerlerini bir kerede bir satır inceleme

IDataView lazily olarak değerlendirilir. Bu belgenin önceki bölümlerinde gösterildiği gibi öğesine dönüştürmeden bir IDataView öğesinin satırlarını yinelemek için IEnumerable yöntemini kullanarak GetRowCursor ve parametre olarak sizin DataViewSchema'nızı IDataView geçirerek bir oluşturun.DataViewRowCursor Ardından, satırları yinelemek için, her sütundan ilgili değerleri ayıklamak için temsilcilerle ValueGetter birlikte imleç yöntemini kullanınMoveNext.

Önemli

Performans amacıyla, ML.NET içindeki vektörler yerel koleksiyon türleri yerine (, Vector,float[] ) kullanırVBuffer.

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

Verilerin bir alt kümesinde ön işleme veya eğitimin önizleme sonucu

Uyarı

Hata ayıklamaya yönelik olduğundan ve performansı düşürebileceğinden üretim kodunda kullanmayın Preview .

Model oluşturma işlemi deneysel ve yinelemelidir. Bir makine öğrenmesi modelini verilerin bir alt kümesinde ön işleme veya eğitimden sonra nasıl görüneceğini önizlemek için, döndüren DataDebuggerPreviewyöntemini kullanınPreview. Sonuç, hem bir hem de IEnumerable belirli bir sütun veya satırdaki değerleri içeren ve RowView özelliklerine sahip ColumnView bir nesnedir. parametresiyle maxRows dönüşümün uygulanacağı satır sayısını belirtin.

Data Debugger Preview Object

bir dosyasını incelemenin IDataView sonucu aşağıdakine benzer olacaktır:

Data Debugger Preview Row View