Dosyalardan ve diğer kaynaklardan veri yükleme
API kullanarak ML.NET'e işleme ve eğitim için veri yükleme hakkında bilgi edinin. Veriler başlangıçta dosyalarda veya veritabanları, JSON, XML veya bellek içinde koleksiyonlar gibi diğer veri kaynaklarında depolanır.
Eğitim verilerini Model Builder, bkz. Eğitim verilerini Model Builder.
Veri modelini oluşturma
ML.NET, sınıflar aracılığıyla veri modelleri tanımlamaya olanak sağlar. Örneğin, aşağıdaki giriş verilerine göre:
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 uygulama
Öznitelikler ML.NET'e veri modeli ve veri kaynağı hakkında daha fazla bilgi sağlar.
özniteliği, LoadColumn özelliklerinizin sütun dizinlerini belirtir.
Önemli
LoadColumn yalnızca bir dosyadan veri yüklenirken gereklidir.
Sütunları şu şekilde yükle:
- sınıfındaki
Sizeve gibiCurrentPricestek tekHousingDatasütunlar. - Sınıfında olduğu gibi vektör şeklinde aynı anda
HistoricalPricesbirden çokHousingDatasütun.
Vektör özelliğiniz varsa VectorType özniteliğini veri modelinizin özelliğine uygulayabilirsiniz. Vektörde yer alan tüm öğelerin aynı türde olması gerekir. Sütunların birbirinden ayrılmasını sağlamak özellik mühendisliğinin kolay ve esnek bir şekilde çalışmasına olanak sağlar, ancak çok fazla sayıda sütun için tek tek sütunların çalışması eğitim hızını etkiler.
ML.NET Sütun adlarına göre çalışır. Bir sütunun adını özellik adı dışında bir adla değiştirmek için özniteliğini ColumnName kullanın. Bellek içinde nesneler oluştururken, özellik adını kullanarak nesneleri oluşturmaya devam edersiniz. Ancak, veri işleme ve makine öğrenmesi modelleri için ML.NET geçersiz kılmaları ve özniteliğinde sağlanan değerle özelliğine ColumnName başvurur.
Tek bir dosyadan veri yükleme
Bir dosyadan veri yüklemek LoadFromTextFile için, yüklenecek verilerin veri modeliyle birlikte yöntemini kullanın. parametresi separatorChar varsayılan olarak sekmeyle ayrılmış olduğu için veri dosyanız için gereken şekilde değiştirin. Dosyanız bir üst bilgiye sahipse parametresini dosyasındaki ilk satırı yoksaymak ve ikinci satırdan hasHeader true veri yüklemeye başlamak için olarak ayarlayı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 depolanmış olması durumunda, veri şeması aynı olduğu sürece ML.NET, aynı dizinde veya birden çok dizinde yer alan birden çok dosyadan veri yüklemenizi sağlar.
Tek bir dizinde dosyalardan yükleme
Tüm veri dosyalarınız aynı dizinde olduğunda yönteminde joker karakterler LoadFromTextFile kullanın.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);
Birden çok dizinde dosyalardan yükleme
Birden çok dizinden veri yüklemek için yöntemini CreateTextLoader kullanarak bir TextLoader oluşturun. Ardından yöntemini TextLoader.Load kullanın 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 tarafından System.Data desteklenen SQL Server, Azure SQL Veritabanı, Oracle, SQLite, PostgreSQL, Progress, IBM DB2 ve daha birçok ilişkisel veritabanından veri yüklenmesini destekler.
Not
kullanmak için DatabaseLoader System.Data.SqlClient NuGet bakın.
adlı bir tablo ve aşağıdaki House şemaya sahip bir veritabanı verilmiştir:
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 bir sınıf tarafından model HouseData olabilir.
public class HouseData
{
public float Size { get; set; }
public float NumBed { get; set; }
public float Price { get; set; }
}
Ardından, uygulamanın içinde bir DatabaseLoader oluşturun.
MLContext mlContext = new MLContext();
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();
Bağlantı dizenizi ve veritabanında yürütülecek SQL bir örnek oluşturma komutunu DatabaseSource tanımlayın. Bu örnek, dosya yolu SQL Server bir LocalDB veritabanı kullanır. Ancak, DatabaseLoader şirket içi ve buluttaki veritabanları için diğer geçerli bağlantı dizelerini 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ünden farklı sayısal verilerin Real biçimine dönüştürülmesi Real gerekir. Tür, ML.NET algoritmaları tarafından beklenen tek duyarlıklı kayan nokta Real değeri veya giriş türü olarak temsil Single eder. Bu örnekte, ve Size NumBed sütunları veritabanındaki tamsayılardır. Yerleşik CAST işlevi kullanılarak işlevine Real dönüştürülür. özelliği Price zaten türünde olduğundan Real olduğu gibi yüklenir.
Verileri Load bir içine yüklemek için yöntemini IDataView kullanın.
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ı olan kaynaklardan veri yüklenmesini destekler:
- Bellek içinde koleksiyonlar
- JSON/XML
Akış kaynaklarıyla çalışırken ML.NET'in girişin bellek içinde bir koleksiyon şeklinde olmasını beklediğinizi unutmayın. Bu nedenle, JSON/XML gibi kaynaklarla çalışırken verileri bellek içinde bir koleksiyonda biçimlendirin.
Aşağıdaki bellek içinde koleksiyona göre:
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
}
};
bellek içinde koleksiyonunu yöntemiyle IDataView bir içine LoadFromEnumerable yükleme:
Önemli
LoadFromEnumerable , yükünden iş IEnumerable parçacığı güvenli olduğunu varsaymaktadır.
// Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);
Sonraki adımlar
- Verileri temizlemek veya başka bir şekilde işlemek için bkz. Verileri model hazırlama.
- Model derlemeye hazırken bkz. Modeli eğitip değerlendirme.