Adatok betöltése fájlokból és más forrásokból
Megtudhatja, hogyan tölthet be adatokat feldolgozásra és betanításra ML.NET az API használatával. Az adatok eredetileg fájlokban vagy más adatforrásokban, például adatbázisokban, JSON-ban, XML-ben vagy memóriabeli gyűjteményekben vannak tárolva.
Ha a Model Buildert használja, olvassa el a Betanítási adatok betöltése a Model Builderbe című témakört.
Az adatmodell létrehozása
ML.NET lehetővé teszi az adatmodellek osztályokon keresztüli meghatározását. Például a következő bemeneti adatok alapján:
Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000
Hozzon létre egy adatmodellt, amely az alábbi kódrészletet jelöli:
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; }
}
Az adatmodell jegyzetelése oszlopattribútumokkal
Az attribútumok további információkat nyújtanak ML.NET az adatmodellről és az adatforrásról.
Az LoadColumn
attribútum megadja a tulajdonságok oszlopindexeit.
Fontos
LoadColumn
csak akkor szükséges, ha adatokat tölt be egy fájlból.
Oszlopok betöltése a következő módon:
- Az egyes oszlopok az osztályhoz hasonlóan
Size
ésCurrentPrices
azHousingData
osztályban is. - Egyszerre több oszlop vektor formájában, mint
HistoricalPrices
azHousingData
osztályban.
Ha vektortulajdonságsal rendelkezik, alkalmazza az VectorType
attribútumot az adatmodell tulajdonságára. Fontos megjegyezni, hogy a vektor összes elemének azonos típusúnak kell lennie. Az oszlopok elkülönítése lehetővé teszi a funkciófejlesztés egyszerűségét és rugalmasságát, de nagyon sok oszlop esetében az egyes oszlopokon végzett munka hatással van a betanítási sebességre.
ML.NET Oszlopneveken keresztül működik. Ha egy oszlop nevét a tulajdonságnéven kívül másra szeretné módosítani, használja az ColumnName
attribútumot. Memóriabeli objektumok létrehozásakor továbbra is a tulajdonságnév használatával hozhat létre objektumokat. Az adatfeldolgozáshoz és a gépi tanulási modellek létrehozásához azonban ML.NET felülbírálja és hivatkozik a tulajdonságra az ColumnName
attribútumban megadott értékkel.
Adatok betöltése egyetlen fájlból
Ha fájlból szeretne adatokat betölteni, használja a LoadFromTextFile
metódust a betöltendő adatok adatmodelljével együtt. Mivel separatorChar
a paraméter alapértelmezés szerint tabulátorral tagolt, szükség szerint módosítsa az adatfájlhoz. Ha a fájl fejléccel rendelkezik, állítsa a hasHeader
paramétert úgy, hogy true
figyelmen kívül hagyja a fájl első sorát, és kezdje el betölteni az adatokat a második sorból.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);
Adatok betöltése több fájlból
Abban az esetben, ha az adatok több fájlban vannak tárolva, mindaddig, amíg az adatséma megegyezik, ML.NET lehetővé teszi az adatok betöltését több fájlból, amelyek ugyanabban a könyvtárban vagy több könyvtárban találhatók.
Betöltés egyetlen könyvtárban lévő fájlokból
Ha az összes adatfájl ugyanabban a könyvtárban található, használjon helyettesítő karaktereket a LoadFromTextFile
metódusban.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);
Betöltés több könyvtárban lévő fájlokból
Ha több könyvtárból szeretne adatokat betölteni, a CreateTextLoader
metódussal hozzon létre egy TextLoader
. Ezután használja a metódust TextLoader.Load
, és adja meg az egyes fájlelérési utakat (helyettesítő karakterek nem használhatók).
//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");
Adatok betöltése relációs adatbázisból
ML.NET támogatja az adatok betöltését az SQL Server, az Azure SQL Database, az Oracle, az SQLite, a PostgreSQL, a Progress, az IBM DB2 és sok más által System.Data
támogatott relációs adatbázisból.
Feljegyzés
A használatához DatabaseLoader
hivatkozzon a System.Data.SqlClient NuGet-csomagra.
Adott egy adatbázis nevesített táblával House
és a következő sémával:
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])
);
Az adatokat egy olyan osztály modellezheti, mint a HouseData
.
public class HouseData
{
public float Size { get; set; }
public float NumBed { get; set; }
public float Price { get; set; }
}
Ezután az alkalmazáson belül hozzon létre egy DatabaseLoader
.
MLContext mlContext = new MLContext();
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();
Adja meg a kapcsolati sztring, valamint az adatbázison végrehajtandó SQL-parancsot, és hozzon létre egy példánytDatabaseSource
. Ez a minta egy LocalDB SQL Server-adatbázist használ egy fájl elérési útjával. A DatabaseLoader azonban minden más érvényes kapcsolati sztring támogat a helyszíni és a felhőbeli adatbázisokhoz.
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);
A nem típusú Real
numerikus adatokat konvertálni Real
kell . A Real
típus egy pontosságú lebegőpontos értékként vagy Single
ML.NET algoritmusok által várt bemeneti típusként jelenik meg. Ebben a mintában az Size
oszlopok egész NumBed
számok az adatbázisban. A beépített függvény használatával a CAST
rendszer átalakítja Real
. Mivel a Price
tulajdonság már típusként Real
van betöltve, a rendszer betölti.
Load
A metódus használatával töltse be az adatokat egy IDataView
.
IDataView data = loader.Load(dbSource);
Adatok betöltése más forrásokból
A fájlokban tárolt adatok betöltése mellett a ML.NET támogatja az adatok betöltését olyan forrásokból, amelyek tartalmazzák, de nem korlátozódnak a következőkre:
- Memóriabeli gyűjtemények
- JSON/XML
Vegye figyelembe, hogy a streamelési források használatakor a ML.NET a bemeneti adatok memórián belüli gyűjtemény formájában fognak működni. Ezért amikor olyan forrásokkal dolgozik, mint a JSON/XML, ügyeljen arra, hogy az adatokat memórián belüli gyűjteménybe formázza.
A következő memóriabeli gyűjteményre tekintettel:
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
}
};
Töltse be a memóriabeli gyűjteményt egy IDataView
metódusba LoadFromEnumerable
:
Fontos
LoadFromEnumerable
feltételezi, hogy a IEnumerable
terhelés szálbiztos.
// Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);
Következő lépések
- Az adatok megtisztításához vagy más módon történő feldolgozásához tekintse meg az Adatok előkészítése modell készítéséhez című témakört.
- Ha készen áll egy modell létrehozására, tekintse meg a modell betanítása és kiértékelése című témakört.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: