Aracılığıyla paylaş


İş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ğıdaki konut verilerini göz önünde bulundurun:

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

ML.NET'te, aşağıdaki bölümlerde açıklandığı gibi, bir IDataView'a yüklenen ara verileri çeşitli yollarla inceleyebilirsiniz.

IDataView'ı IEnumerable'a Dönüştürme

'yi incelemenin IDataView en hızlı yollarından biri, bunu öğesine IEnumerabledönüştürmektir. Bu dönüştürmeyi yapmak için CreateEnumerable yöntemini kullanın.

Performansı iyileştirmek için olarak reuseRowObjectayarlayıntrue. Bunu yapmak, veri kümesindeki her satır için yeni bir nesne oluşturmanın aksine, aynı nesneyi geçerli satırın verileriyle doldurur.

// 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 CreateEnumerable kullanın reuseRowObject ve olarak ayarlayınfalse. Ardından, öğesini IEnumerable bir diziye veya listeye dönüştürün.

Uyarı

CreateEnumerable sonucunu bir diziye veya listeye dönüştürmek, istenen tüm IDataView 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 DataViewRowCursor ve parametre olarak sizin DataViewSchema'nızı GetRowCursor geçirerek bir oluşturun.IDataView Ardından, satırları yinelemek için, her sütundan ilgili değerleri ayıklamak için temsilcilerle MoveNext birlikte imleç yöntemini kullanınValueGetter.

Önemli

Performans amacıyla, ML.NET vektörler yerel koleksiyon türleri (Vector ve float[]) yerine VBuffer kullanır.

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

Bir veri alt kümesinde ön işleme veya eğitimin sonucunun önizlemesi

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ümesi üzerinde önişledikten veya eğitdikten sonra nasıl görüneceğini önizlemek için DataDebuggerPreviewdöndüren Preview yöntemini kullanın. Sonuç, hem IEnumerable hem de belirli bir sütun veya satırdaki değerleri içeren ColumnView ve RowView özelliklerine sahip bir nesnedir. parametresiyle maxRows dönüşümün uygulanacağı satır sayısını belirtin.

Veri Hata Ayıklayıcısı Önizleme Nesnesi

Bir IDataView incelemenin sonucu aşağıdaki görüntüye benzer:

Veri Hata Ayıklayıcısı Önizleme Satırı Görünümü