İş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 IEnumerable
dönüştürmektir. yöntemini kullanmak CreateEnumerable
üzere dönüştürmek IDataView
içinIEnumerable
.
Performansı iyileştirmek için olarak true
ayarlayı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 IEnumerable
dö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 DataDebuggerPreview
yö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.
bir dosyasını incelemenin IDataView
sonucu aşağıdakine benzer olacaktır: