Memuat data dari file dan sumber lainnya

Pelajari cara memuat data untuk pemrosesan dan pelatihan ke ML.NET menggunakan API. Data awalnya disimpan dalam file atau sumber data lain seperti database, JSON, XML, atau koleksi dalam memori.

Jika Anda menggunakan Model Builder, lihat Memuat data pelatihan ke dalam Model Builder.

Membuat model data

ML.NET memungkinkan Anda menentukan model data melalui kelas. Misalnya, mengingat data input berikut:

Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000

Buat model data yang mewakili cuplikan di bawah ini:

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; }
}

Membuat anotasi model data dengan atribut kolom

Atribut memberikan ML.NET informasi lebih lanjut tentang model data dan sumber data.

Atribut LoadColumn menentukan indeks kolom properti Anda.

Penting

LoadColumn hanya diperlukan saat memuat data dari file.

Muat kolom sebagai:

  • Kolom individual seperti Size dan CurrentPrices di HousingData kelas .
  • Beberapa kolom pada satu waktu dalam bentuk vektor seperti HistoricalPrices di HousingData kelas .

Jika Anda memiliki properti vektor, terapkan VectorType atribut ke properti dalam model data Anda. Penting untuk dicatat bahwa semua elemen dalam vektor harus berjenis yang sama. Menjaga kolom tetap dipisahkan memungkinkan kemudahan dan fleksibilitas rekayasa fitur, tetapi untuk sejumlah besar kolom, beroperasi pada kolom individu menyebabkan dampak pada kecepatan pelatihan.

ML.NET Beroperasi melalui nama kolom. Jika Anda ingin mengubah nama kolom menjadi sesuatu selain nama properti, gunakan ColumnName atribut . Saat membuat objek dalam memori, Anda masih membuat objek menggunakan nama properti. Namun, untuk pemrosesan data dan membangun model pembelajaran mesin, ML.NET mengambil alih dan mereferensikan properti dengan nilai yang disediakan dalam ColumnName atribut .

Memuat data dari satu file

Untuk memuat data dari file, gunakan LoadFromTextFile metode bersama dengan model data untuk data yang akan dimuat. Karena separatorChar parameter dibatasi tab secara default, ubah untuk file data Anda sesuai kebutuhan. Jika file Anda memiliki header, atur hasHeader parameter ke untuk true mengabaikan baris pertama dalam file dan mulai memuat data dari baris kedua.

//Create MLContext
MLContext mlContext = new MLContext();

//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);

Memuat data dari beberapa file

Jika data Anda disimpan dalam beberapa file, selama skema data sama, ML.NET memungkinkan Anda memuat data dari beberapa file yang berada di direktori yang sama atau beberapa direktori.

Memuat dari file dalam satu direktori

Ketika semua file data Anda berada di direktori yang sama, gunakan kartubebas dalam metode .LoadFromTextFile

//Create MLContext
MLContext mlContext = new MLContext();

//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);

Memuat dari file dalam beberapa direktori

Untuk memuat data dari beberapa direktori, gunakan CreateTextLoader metode untuk membuat TextLoader. Kemudian, gunakan TextLoader.Load metode dan tentukan jalur file individual (kartubebas tidak dapat digunakan).

//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");

Memuat data dari database relasional

ML.NET mendukung pemuatan data dari berbagai database relasional yang didukung oleh System.Data yang mencakup SQL Server, Azure SQL Database, Oracle, SQLite, PostgreSQL, Progress, IBM DB2, dan banyak lagi.

Catatan

Untuk menggunakan DatabaseLoader, referensikan paket System.Data.SqlClient NuGet.

Mengingat database dengan tabel bernama House dan skema berikut:

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])
);

Data dapat dimodelkan oleh kelas seperti HouseData.

public class HouseData
{
    public float Size { get; set; }

    public float NumBed { get; set; }

    public float Price { get; set; }
}

Kemudian, di dalam aplikasi Anda, buat DatabaseLoader.

MLContext mlContext = new MLContext();

DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();

Tentukan string koneksi Anda serta perintah SQL yang akan dijalankan pada database dan buat DatabaseSource instans. Sampel ini menggunakan database LocalDB SQL Server dengan jalur file. Namun, DatabaseLoader mendukung string koneksi valid lainnya untuk database lokal dan di cloud.

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);

Data numerik yang bukan tipe Real harus dikonversi ke Real. Jenis Real ini direpresentasikan sebagai nilai floating-point presisi tunggal atau Single, jenis input yang diharapkan oleh algoritma ML.NET. Dalam sampel ini, Size kolom dan NumBed adalah bilangan bulat dalam database. Menggunakan fungsi bawaan CAST , fungsi ini dikonversi ke Real. Price Karena properti sudah berjenis Real sudah dimuat apa adanya.

Load Gunakan metode untuk memuat data ke dalam IDataView.

IDataView data = loader.Load(dbSource);

Memuat data dari sumber lain

Selain memuat data yang disimpan dalam file, ML.NET mendukung pemuatan data dari sumber yang menyertakan tetapi tidak terbatas pada:

  • Koleksi dalam memori
  • JSON/XML

Perhatikan bahwa saat bekerja dengan sumber streaming, ML.NET mengharapkan input dalam bentuk koleksi dalam memori. Oleh karena itu, saat bekerja dengan sumber seperti JSON/XML, pastikan untuk memformat data ke dalam koleksi dalam memori.

Mengingat koleksi dalam memori berikut:

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
    }
};

Muat koleksi dalam memori ke dalam IDataView dengan LoadFromEnumerable metode :

Penting

LoadFromEnumerable mengasumsikan bahwa yang dimuatnya IEnumerable adalah utas-aman.

// Create MLContext
MLContext mlContext = new MLContext();

//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);

Langkah berikutnya