Načtení dat ze souborů a dalších zdrojů
Naučte se načítat data pro zpracování a trénování do ML.NET pomocí rozhraní API. Data jsou původně uložená v souborech nebo jiných zdrojích dat, jako jsou databáze, JSON, XML nebo kolekce v paměti.
Pokud používáte Tvůrce modelů, přečtěte si téma Načtení trénovacích dat do Tvůrce modelů.
Vytvoření datového modelu
ML.NET umožňuje definovat datové modely prostřednictvím tříd. Například při zadání následujících vstupních dat:
Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000
Vytvořte datový model, který představuje následující fragment kódu:
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; }
}
Přidávání poznámek k datovému modelu s atributy sloupců
Atributy poskytují ML.NET další informace o datovém modelu a zdroji dat.
Atribut LoadColumn
určuje indexy sloupců vlastností.
Důležité
LoadColumn
je vyžadován pouze při načítání dat ze souboru.
Načtěte sloupce jako:
- Jednotlivé sloupce jako
Size
aCurrentPrices
veHousingData
třídě. - Více sloupců najednou ve formě vektoru, jako
HistoricalPrices
je třídaHousingData
.
Pokud máte vektorovou vlastnost, použijte VectorType
atribut na vlastnost v datovém modelu. Je důležité si uvědomit, že všechny prvky vektoru musí být stejného typu. Oddělení sloupců umožňuje snadno a flexibilně pracovat s technickými funkcemi, ale u velmi velkého počtu sloupců způsobuje provoz na jednotlivých sloupcích vliv na rychlost trénování.
ML.NET Funguje prostřednictvím názvů sloupců. Pokud chcete změnit název sloupce na jiný než název vlastnosti, použijte ColumnName
atribut. Při vytváření objektů v paměti stále vytváříte objekty pomocí názvu vlastnosti. Pro zpracování dat a vytváření modelů strojového učení však ML.NET přepsání a odkazování na vlastnost s hodnotou zadanou v atributu ColumnName
.
Načtení dat z jednoho souboru
K načtení dat ze souboru použijte metodu LoadFromTextFile
spolu s datovým modelem pro načtení dat. Vzhledem k tomu, že separatorChar
parametr je ve výchozím nastavení oddělený tabulátorem, změňte ho pro datový soubor podle potřeby. Pokud má soubor záhlaví, nastavte hasHeader
parametr tak, aby true
ignoroval první řádek v souboru a začal načítat data z druhého řádku.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);
Načtení dat z více souborů
V případě, že jsou vaše data uložená ve více souborech, pokud je schéma dat stejné, ML.NET umožňuje načíst data z více souborů, které jsou buď ve stejném adresáři, nebo ve více adresářích.
Načtení ze souborů v jednom adresáři
Pokud jsou všechny datové soubory ve stejném adresáři, použijte v LoadFromTextFile
metodě zástupné cardy.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);
Načtení ze souborů v několika adresářích
Chcete-li načíst data z více adresářů, použijte CreateTextLoader
metodu TextLoader
k vytvoření . Pak použijte metodu TextLoader.Load
a určete jednotlivé cesty k souborům (zástupné cardy nelze použít).
//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");
Načtení dat z relační databáze
ML.NET podporuje načítání dat z různých relačních databází podporovaných sql Serverem System.Data
, Azure SQL Database, Oracle, SQLite, PostgreSQL, Progress, IBM DB2 a mnoho dalších.
Poznámka:
Chcete-li použít DatabaseLoader
, odkazujte na balíček NuGet System.Data.SqlClient .
Databáze s názvem House
a následujícím schématem:
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 lze modelovat podle třídy, jako je HouseData
.
public class HouseData
{
public float Size { get; set; }
public float NumBed { get; set; }
public float Price { get; set; }
}
Pak v aplikaci vytvořte DatabaseLoader
.
MLContext mlContext = new MLContext();
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();
Definujte připojovací řetězec a také příkaz SQL, který se má spustit v databázi, a vytvořte DatabaseSource
instanci. Tato ukázka používá databázi SQL Serveru LocalDB s cestou k souboru. DatabaseLoader ale podporuje všechny další platné připojovací řetězec pro místní databáze i v cloudu.
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);
Číselná data, která nejsou typu Real
, musí být převedena na Real
. Typ Real
je reprezentován jako hodnota s plovoucí desetinnou čárkou s jednou přesností nebo Single
, vstupní typ očekávaný ML.NET algoritmy. V této ukázce Size
jsou sloupce NumBed
celá čísla v databázi. CAST
Pomocí integrované funkce se převede na Real
. Vzhledem k tomu, že Price
vlastnost je již typu Real
, je načtena tak, jak je.
Použijte metodu Load
k načtení dat do objektu IDataView
.
IDataView data = loader.Load(dbSource);
Načtení dat z jiných zdrojů
Kromě načítání dat uložených v souborech ML.NET podporuje načítání dat ze zdrojů, které zahrnují, ale nejsou omezené na:
- Kolekce v paměti
- JSON/XML
Všimněte si, že při práci se zdroji streamování ML.NET očekává, že vstup bude ve formě kolekce v paměti. Proto při práci se zdroji, jako je JSON/XML, nezapomeňte data naformátovat do kolekce v paměti.
S ohledem na následující kolekci v paměti:
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
}
};
Načtěte kolekci v paměti do IDataView
LoadFromEnumerable
metody:
Důležité
LoadFromEnumerable
předpokládá, že IEnumerable
zatížení z něj je bezpečné pro přístup z více vláken.
// Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);
Další kroky
- Pokud chcete data vyčistit nebo jinak zpracovat, přečtěte si téma Příprava dat pro vytvoření modelu.
- Až budete připraveni vytvořit model, přečtěte si téma Trénování a vyhodnocení modelu.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro