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 Size ve gibi CurrentPrices tek tek HousingData sütunlar.
  • Sınıfında olduğu gibi vektör şeklinde aynı anda HistoricalPrices birden çok HousingData sü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