Dosyalardan ve diğer kaynaklardan veri yükleme
API'yi kullanarak işleme ve eğitim için verileri ML.NET yüklemeyi öğrenin. Veriler başlangıçta dosyalarda veya veritabanları, JSON, XML veya bellek içi koleksiyonlar gibi diğer veri kaynaklarında depolanır.
Model Oluşturucusu kullanıyorsanız bkz . Eğitim verilerini Model Oluşturucusuna yükleme.
Veri modelini oluşturma
ML.NET, sınıflar aracılığıyla veri modelleri tanımlamanızı sağlar. Örneğin, aşağıdaki giriş verileri göz önünde bulundurulduğunda:
Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000
Aşağıdaki kod parçacığını temsil eden bir veri modeli oluşturun:
public class HousingData
{
[LoadColumn(0)]
public float Size { get; set; }
[LoadColumn(1, 3)]
[VectorType(3)]
public float[] HistoricalPrices { get; set; }
[LoadColumn(4)]
[ColumnName("Label")]
public float CurrentPrice { get; set; }
}
Veri modeline sütun öznitelikleriyle açıklama ekleme
Öznitelikler ML.NET veri modeli ve veri kaynağı hakkında daha fazla bilgi verir.
LoadColumn
özniteliği, özelliklerinizin sütun dizinlerini belirtir.
Önemli
LoadColumn
yalnızca bir dosyadan veri yüklenirken gereklidir.
Sütunları şu şekilde yükleyin:
- sınıfındaki
HousingData
veCurrentPrices
gibiSize
tek tek sütunlar. - Sınıfındaki gibi
HistoricalPrices
bir vektör biçiminde bir keredeHousingData
birden çok sütun.
Vektör özelliğine sahipseniz, özniteliğini veri modelinizdeki özelliğe uygulayın VectorType
. Vektördeki tüm öğelerin aynı türde olması gerektiğini unutmayın. Sütunların ayrı tutulması özellik mühendisliğinin kolay ve esnek olmasına olanak tanır, ancak çok fazla sayıda sütun için tek tek sütunlar üzerinde çalışma, eğitim hızı üzerinde bir etkiye neden olur.
ML.NET Sütun adları aracılığıyla çalışır. Bir sütunun adını özellik adından farklı bir adla değiştirmek istiyorsanız özniteliğini ColumnName
kullanın. Bellek içi nesneler oluştururken, yine de özellik adını kullanarak nesneler oluşturursunuz. Ancak, veri işleme ve makine öğrenmesi modelleri derleme için ML.NET geçersiz kılar ve özniteliğinde sağlanan değerle özelliğine ColumnName
başvurur.
Tek bir dosyadan veri yükleme
Bir dosyadan veri yüklemek için, yüklenecek verilerin veri modeliyle birlikte yöntemini kullanın LoadFromTextFile
. separatorChar
Parametre varsayılan olarak sekmeyle sınırlandırıldığından, bunu veri dosyanız için gerektiği gibi değiştirin. Dosyanızın üst bilgisi varsa, parametresini hasHeader
true
dosyasındaki ilk satırı yoksayacak şekilde ayarlayın ve ikinci satırdan veri yüklemeye başlayın.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);
Birden çok dosyadan veri yükleme
Verilerinizin birden çok dosyada depolanması durumunda, veri şeması aynı olduğu sürece ML.NET aynı dizinde veya birden çok dizinde bulunan birden çok dosyadan veri yüklemenize olanak tanır.
Tek bir dizindeki dosyalardan yükleme
Tüm veri dosyalarınız aynı dizinde olduğunda yönteminde LoadFromTextFile
joker karakterler kullanın.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);
Birden çok dizindeki dosyalardan yükleme
Birden çok dizinden veri yüklemek için yöntemini kullanarak CreateTextLoader
bir TextLoader
oluşturun. Ardından yöntemini kullanın TextLoader.Load
ve tek tek dosya yollarını belirtin (joker karakterler kullanılamaz).
//Create MLContext
MLContext mlContext = new MLContext();
// Create TextLoader
TextLoader textLoader = mlContext.Data.CreateTextLoader<HousingData>(separatorChar: ',', hasHeader: true);
// Load Data
IDataView data = textLoader.Load("DataFolder/SubFolder1/1.txt", "DataFolder/SubFolder2/1.txt");
İlişkisel veritabanından veri yükleme
ML.NET SQL Server, Azure SQL Veritabanı, Oracle, SQLite, PostgreSQL, Progress, IBM DB2 ve daha birçok ilişkisel veritabanından System.Data
veri yüklemeyi destekler.
Not
kullanmak DatabaseLoader
için System.Data.SqlClient NuGet paketine başvurun.
adlı House
bir tablo ve aşağıdaki şemaya sahip bir veritabanı verilir:
CREATE TABLE [House] (
[HouseId] INT NOT NULL IDENTITY,
[Size] INT NOT NULL,
[NumBed] INT NOT NULL,
[Price] REAL NOT NULL
CONSTRAINT [PK_House] PRIMARY KEY ([HouseId])
);
Veriler gibi HouseData
bir sınıf tarafından modellenebilir.
public class HouseData
{
public float Size { get; set; }
public float NumBed { get; set; }
public float Price { get; set; }
}
Ardından, uygulamanızın içinde bir DatabaseLoader
oluşturun.
MLContext mlContext = new MLContext();
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();
veritabanında yürütülecek SQL komutunun yanı sıra bağlantı dizesi tanımlayın ve bir DatabaseSource
örnek oluşturun. Bu örnek, dosya yolu olan bir LocalDB SQL Server veritabanı kullanır. Ancak DatabaseLoader, şirket içi ve buluttaki veritabanları için diğer geçerli bağlantı dizesi destekler.
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=<YOUR-DB-FILEPATH>;Database=<YOUR-DB-NAME>;Integrated Security=True;Connect Timeout=30";
string sqlCommand = "SELECT CAST(Size as REAL) as Size, CAST(NumBed as REAL) as NumBed, Price FROM House";
DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, sqlCommand);
Türünde Real
olmayan sayısal verilerin olarak dönüştürülmesi Real
gerekir. Tür Real
, tek duyarlıklı kayan nokta değeri veya Single
ML.NET algoritmalar tarafından beklenen giriş türü olarak temsil edilir. Bu örnekte ve Size
NumBed
sütunları veritabanındaki tamsayılardır. CAST
Yerleşik işlevi kullanılarak işlevine Real
dönüştürülür. Price
Özellik zaten türünde Real
olduğundan olduğu gibi yüklenir.
Load
yöntemini kullanarak verileri içine IDataView
yükleyin.
IDataView data = loader.Load(dbSource);
Diğer kaynaklardan veri yükleme
ML.NET, dosyalarda depolanan verileri yüklemeye ek olarak şunları içeren ancak bunlarla sınırlı olmayan kaynaklardan veri yüklemeyi destekler:
- Bellek için koleksiyonlar
- JSON/XML
Akış kaynaklarıyla çalışırken ML.NET girişin bellek içi koleksiyon biçiminde olmasını beklediğini unutmayın. Bu nedenle, JSON/XML gibi kaynaklarla çalışırken verileri bellek içi bir koleksiyonda biçimlendirdiğinizden emin olun.
Aşağıdaki bellek içi koleksiyon göz önünde bulundurulduğunda:
HousingData[] inMemoryCollection = new HousingData[]
{
new HousingData
{
Size =700f,
HistoricalPrices = new float[]
{
100000f, 3000000f, 250000f
},
CurrentPrice = 500000f
},
new HousingData
{
Size =1000f,
HistoricalPrices = new float[]
{
600000f, 400000f, 650000f
},
CurrentPrice=700000f
}
};
yöntemiyle LoadFromEnumerable
bellek içi koleksiyonu içine IDataView
yükleyin:
Önemli
LoadFromEnumerable
öğesinin IEnumerable
yüklendiği iş parçacığı güvenli olduğunu varsayar.
// Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin