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 ve CurrentPrices gibi Size tek tek sütunlar.
  • Sınıfındaki gibi HistoricalPrices bir vektör biçiminde bir kerede HousingData 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 hasHeadertrue 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 TextLoaderoluş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 DatabaseLoaderiç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 HouseDatabir 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 DatabaseLoaderoluş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 Realgerekir. Tür Real , tek duyarlıklı kayan nokta değeri veya SingleML.NET algoritmalar tarafından beklenen giriş türü olarak temsil edilir. Bu örnekte ve SizeNumBed sütunları veritabanındaki tamsayılardır. CAST Yerleşik işlevi kullanılarak işlevine Realdö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 IDataViewyü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

  • Verileri temizlemek veya başka bir şekilde işlemek için bkz . Model oluşturmak için verileri hazırlama.
  • Model oluşturmaya hazır olduğunuzda bkz . Modeli eğitma ve değerlendirme.