Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak pomocí ML.NET vytvořit model clusteringu pro datovou sadu iris.
V tomto návodu se naučíte, jak:
- Pochopení problému
- Vyberte příslušnou úlohu strojového učení.
- Příprava dat
- Načtení a transformace dat
- Volba algoritmu učení
- Trénování modelu
- Použití modelu pro předpovědi
Požadavky
Pochopení problému
Tento problém spočívá v rozdělení sady irisových květin do různých skupin na základě znaků květin. Tyto vlastnosti jsou délka a šířka sepalu a délky a šířky okvětního lístku. Pro účely tohoto kurzu předpokládejme, že typ každé květiny je neznámý. Chcete zjistit strukturu datové sady z funkcí a předpovědět, jak tato struktura odpovídá instanci dat.
Vyberte příslušnou úlohu strojového učení.
Když nevíte, do které skupiny každá květina patří, zvolíte úkol strojového učení bez dohledu. Pokud chcete rozdělit datovou sadu ve skupinách takovým způsobem, aby prvky ve stejné skupině byly více podobné sobě, než ty v jiných skupinách, použijte úlohu clusteringového strojového učení.
Vytvoření konzolové aplikace
Vytvořte konzolovou aplikaci jazyka C# s názvem IrisFlowerClustering. Klikněte na tlačítko Next.
Jako architekturu, která se má použít, zvolte .NET 8. Klikněte na tlačítko Vytvořit.
Vytvořte v projektu adresář s názvem Data , do které se uloží datová sada a soubory modelu:
V Průzkumníku řešení klikněte pravým tlačítkem na projekt a vyberte Přidat>novou složku. Zadejte "Data" a vyberte Enter.
Nainstalujte balíček NuGet Microsoft.ML :
Poznámka:
Tato ukázka používá nejnovější stabilní verzi uvedených balíčků NuGet, pokud není uvedeno jinak.
V Průzkumník řešení klikněte pravým tlačítkem na projekt a vyberte Spravovat balíčky NuGet. Jako zdroj balíčku zvolte "nuget.org", vyberte kartu Procházet , vyhledejte Microsoft.ML a vyberte Nainstalovat. V dialogovém okně Náhled změn vyberte tlačítko OK a pak v dialogovém okně Přijetí licence vyberte tlačítko Přijmout, pokud souhlasíte s licenčními podmínkami pro uvedené balíčky.
Příprava dat
Stáhněte sadu dat iris.data a uložte ji do složky Data , kterou jste vytvořili v předchozím kroku. Další informace o sadě dat iris naleznete na Wikipedii na stránce Iris flower data set a na stránce Sada dat Iris, která je zdrojem tohoto souboru dat.
V Průzkumníku řešení klikněte pravým tlačítkem myši na soubor iris.data a vyberte Vlastnosti. V části Upřesnit změňte hodnotu „Kopírovat do výstupního adresáře“ na „Kopírovat, pokud je novější“.
Datový soubor iris.data obsahuje pět sloupců, které představují:
- délka sepalu v centimetrech
- šířka sepalu v centimetrech
- délka okvětní lístků v centimetrech
- šířka okvětního lístku v centimetrech
- typ duhovky květiny
Pro účely příkladu clusteringu tento kurz ignoruje poslední sloupec.
Vytváření datových tříd
Vytvořte třídy pro vstupní data a předpovědi:
V Průzkumníku řešení klikněte pravým tlačítkem myši na projekt a pak vyberte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte Třída a změňte pole Název na IrisData.cs. Pak vyberte Přidat.
Do nového souboru přidejte následující
usingdirektivu:using Microsoft.ML.Data;
Odeberte existující definici třídy a přidejte následující kód, který definuje třídy IrisData a ClusterPrediction, do IrisData.cs souboru:
public class IrisData
{
[LoadColumn(0)]
public float SepalLength;
[LoadColumn(1)]
public float SepalWidth;
[LoadColumn(2)]
public float PetalLength;
[LoadColumn(3)]
public float PetalWidth;
}
public class ClusterPrediction
{
[ColumnName("PredictedLabel")]
public uint PredictedClusterId;
[ColumnName("Score")]
public float[]? Distances;
}
IrisData je vstupní datová třída a má definice pro každou funkci ze sady dat. Pomocí atributu LoadColumn určete indexy zdrojových sloupců v souboru sady dat.
Třída ClusterPrediction představuje výstup modelu shlukování použitého na instanci IrisData. Pomocí atributu ColumnName vytvořte vazbu polí PredictedClusterIdDistances na sloupce PredictedLabel a Score . V případě úlohy clusteringu mají tyto sloupce následující význam:
- Sloupec PredictedLabel obsahuje ID predikovaného clusteru.
- Sloupec skóre obsahuje pole s čtvercovými euklidovými vzdálenostmi ke centroidům clusteru. Délka pole se rovná počtu clusterů.
Poznámka:
float Tento typ slouží k reprezentaci hodnot s plovoucí desetinou čárkou ve vstupních a prediktivních datových třídách.
Definování cest k datům a modelům
Vraťte se do souboru Program.cs a přidejte dvě pole pro uložení cest k souboru datové sady a k souboru pro uložení modelu:
-
_dataPathobsahuje cestu k souboru s datovou sadou použitou k trénování modelu. -
_modelPathobsahuje cestu k souboru, kde je trénovaný model uložen.
Do direktiv přidejte následující kód using pro určení těchto cest:
string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data");
string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");
Vytvoření kontextu ML
Na začátek souboru using přidejte následující další direktivy:
using Microsoft.ML;
using IrisFlowerClustering;
Console.WriteLine("Hello World!"); Řádek nahraďte následujícím kódem:
var mlContext = new MLContext(seed: 0);
Třída Microsoft.ML.MLContext představuje prostředí strojového učení a poskytuje mechanismy pro protokolování a vstupní body pro načítání dat, trénování modelu, predikce a další úlohy. To je srovnatelné s používáním DbContext v Entity Frameworku.
Nastavení načítání dat
Přidejte následující kód pod kód, MLContext který nastaví způsob načtení dat:
IDataView dataView = mlContext.Data.LoadFromTextFile<IrisData>(_dataPath, hasHeader: false, separatorChar: ',');
Obecná MLContext.Data.LoadFromTextFile rozšiřující metoda odvodí schéma sady dat ze zadaného IrisData typu a vrátí, IDataView které lze použít jako vstup pro transformátory.
Vytvoření výukového kanálu
V tomto kurzu se kanál výuky úlohy clusteringu skládá ze dvou následujících kroků:
- zřetězení načtených sloupců do jednoho sloupce Funkce, který používá trenér pro shlukování;
- pomocí trenéra KMeansTrainer natrénujte model pomocí algoritmu clusteringu k-means++.
Po načtení dat přidejte následující:
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 3));
Kód určuje, že sada dat by měla být rozdělena do tří clusterů.
Trénování modelu
Kroky přidané v předchozích částech připravily kanál pro trénování, ale nebyly provedeny žádné. Do dolní části souboru přidejte následující řádek, který provede načítání dat a trénování modelu:
var model = pipeline.Fit(dataView);
Uložení modelu
V tuto chvíli máte model, který lze integrovat do některé z existujících nebo nových aplikací .NET. Pokud chcete model uložit do souboru .zip, přidejte následující kód, který volá metodu Fit :
using (var fileStream = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
mlContext.Model.Save(model, dataView.Schema, fileStream);
}
Použití modelu pro předpovědi
K předpovědím použijte PredictionEngine<TSrc,TDst> třídu, která přebírá instance vstupního typu prostřednictvím kanálu transformátoru a vytváří instance výstupního typu. Přidejte následující řádek pro vytvoření instance této třídy:
var predictor = mlContext.Model.CreatePredictionEngine<IrisData, ClusterPrediction>(model);
PredictionEngine je pohodlné rozhraní API, které umožňuje provádět predikce pro jednu instanci dat.
PredictionEngine není bezpečný pro přístup z více vláken. Je přijatelné použít v jednovláknovém nebo prototypovém prostředí. Pokud chcete zvýšit výkon a bezpečnost vláken v produkčních prostředích, použijte PredictionEnginePool službu, která vytvoří ObjectPoolPredictionEngine objekty pro použití v celé aplikaci. V tomto průvodci se dozvíte, jak používat PredictionEnginePool webové rozhraní API ASP.NET Core.
Poznámka:
PredictionEnginePool Rozšíření služby je aktuálně ve verzi Preview.
Vytvořte třídu TestIrisData, která bude uchovávat instance testovacích dat:
V Průzkumníku řešení klikněte pravým tlačítkem myši na projekt a pak vyberte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte Třída a změňte pole Název na TestIrisData.cs. Pak vyberte Přidat.
Upravte třídu tak, aby byla statická jako v následujícím příkladu:
static class TestIrisData
Tento tutoriál představuje jednu instanci dat irisu v rámci této třídy. K experimentování s modelem můžete přidat další scénáře. Do třídy přidejte následující kód TestIrisData :
internal static readonly IrisData Setosa = new IrisData
{
SepalLength = 5.1f,
SepalWidth = 3.5f,
PetalLength = 1.4f,
PetalWidth = 0.2f
};
Pokud chcete zjistit cluster, ke kterému zadaná položka patří, vraťte se do souboru Program.cs a do dolní části souboru přidejte následující kód:
var prediction = predictor.Predict(TestIrisData.Setosa);
Console.WriteLine($"Cluster: {prediction.PredictedClusterId}");
Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances ?? Array.Empty<float>())}");
Spuštěním programu zjistíte, který cluster obsahuje zadanou instanci dat a čtvercové vzdálenosti od této instance do centroidů clusteru. Výsledky by měly být podobné následujícímu:
Cluster: 2
Distances: 11.69127 0.02159119 25.59896
Gratulujeme! Teď jste úspěšně vytvořili model strojového učení pro clustering iris a použili ho k vytváření předpovědí. Zdrojový kód pro tento kurz najdete v úložišti Dotnet/samples Na GitHubu.
Další kroky
V tomto kurzu jste se naučili:
- Pochopení problému
- Vyberte příslušnou úlohu strojového učení.
- Příprava dat
- Načtení a transformace dat
- Volba algoritmu učení
- Trénování modelu
- Použití modelu pro předpovědi
Projděte si úložiště dotnet/machinelearning GitHub, kde můžete pokračovat ve studiu a najít další ukázky.