ML.NET koneoppimisen malli omaan .Net sovellukseesi

05.04.2024

ML.NET

ML.NET on koneoppimiskehys .NET-kehittäjille; voit käyttää ML.NET:iä integroidaksesi mukautettuja koneoppimismalleja .NET-sovelluksiin. Voit käyttää ML.NET:iä moniin skenaarioihin, kuten mielialan analysointiin, hintaennusteisiin, tuotesuosituksiin, myyntiennusteisiin, kuvien luokitteluun, esineiden havaitsemiseen ja muihin!

ML.NET on ilmainen, avoimen lähdekoodin ja alustariippumaton koneoppimisen viitekehys .NET-kehittäjäalustalle.

ML.NET mahdollistaa sinun kouluttaa, rakentaa ja toimittaa omia koneoppimismalleja käyttäen C#- tai F#-kieliä erilaisiin koneoppimisskenaarioihin. ML.NET sisältää ominaisuuksia, kuten automatisoidun koneoppimisen (AutoML), ja työkaluja, kuten ML.NET CLI:n ja ML.NET Model Builderin, jotka tekevät koneoppimisen integroimisesta sovelluksiisi entistä helpompaa.

ML.NET seuraa lähes jokaisessa skenaariossa samoja perusvaiheita; se yhdistää datan lataamisen, transformaatiot ja mallin kouluttamisen, mikä tekee koneoppimismallien luomisesta sinulle helpompaa.

Tässä blogikirjoituksessa on kerrottu lyhyesti ML.NET kehyksen toimintaperiaate vaiheittain.


Luo ML.NET-konteksti

MLContext on kaikkien ML.NET-operaatioiden lähtökohta. MLContextia käytetään kaikissa koneoppimismallin luomiseen ja käyttöön liittyvissä aspekteissa. Se on konseptuaalisesti samankaltainen kuin DbContext Entity Frameworkissa.

var mlContext = new MLContext();

Kun sinulla on MLContext-olio, voit ladata ja muuntaa dataa, valita parhaan algoritmin koneoppimistehtävääsi varten, kouluttaa mallisi, testata mallisi tarkkuuden, tallentaa sen levylle ja käyttää sitä ennusteiden tekemiseen. MLContext voidaan alustaa myös aiemmin levylle tallennetusta mallista.

MLContext Properties (ominaisuudet) ovat:

  • AnomalyDetection (Poikkeavuuksien havaitseminen): Kouluttajat ja tehtävät, jotka on suunniteltu erityisesti poikkeavuuksien eli odottamattomien datapisteen havaitsemiseen.
  • BinaryClassification (Binaariluokittelu): Menetelmät ja tehtävät, jotka liittyvät kahteen luokkaan jakavien ongelmien ratkaisuun.
  • Clustering (Klusterointi): Tekniikat ja tehtävät datajoukkojen ryhmittelyyn samankaltaisuuden perusteella.
  • ComponentCatalog (Komponenttikirjasto): Kokoelma komponentteja, joita käytetään mallien lataamisessa ja hallinnassa.
  • Data: Työkalut datan lataamiseen ja tallentamiseen.
  • FallbackToCpu: Mahdollisuus käyttää keskusyksikköä (CPU), mikäli näytönohjain (GPU) ei ole käytettävissä tai sen suorituskyky ei riitä.
  • Forecasting (Ennustaminen): Menetelmät ja tehtävät, jotka ovat suunnattu aikasarjaennusteiden ja muiden ennustamisongelmien ratkaisuun.
  • GpuLaiteId: Näytönohjaimen tunniste, jota käytetään laskennassa. Jos arvo on "null", laskenta suoritetaan CPU:lla.
  • Model (Malli): Toiminnot, jotka liittyvät koulutettujen koneoppimismallien käyttöön ja hallintaan.
  • MulticlassClassification  (Moniluokkaluokittelu): Menetelmät, jotka liittyvät ongelmiin, joissa on enemmän kuin kaksi luokiteltavaa luokkaa.
  • Ranking: Menetelmät ja tehtävät, jotka liittyvät entiteettien järjestämiseen niiden merkityksen tai prioriteetin mukaan.
  • Regression (Regressio): Menetelmät ja tehtävät, jotka liittyvät jatkuvien arvojen ennustamiseen.
  • TempFilePath : Väliaikaisten tiedostojen sijainti, joita ML.NET luo ja käyttää prosessien aikana.
  • Transforms (Muunnokset): Datan esikäsittelyyn ja jalostukseen liittyvät toiminnot.


Tutustu MLContext luokka dokumentaatioon

Lataa data


Koneoppiminen käyttää tunnettua dataa (esimerkiksi koulutusdataa) löytääkseen kaavoja, jotta se voi tehdä ennusteita uudesta, tuntemattomasta datasta.

Koneoppimisen syötteitä kutsutaan Ominaisuuksiksi (Features) , jotka ovat attribuutteja, joita käytetään ennustusten tekemiseen. Koneoppimisen tuotos on Label, mikä on itse ennuste.

Data ML.NET:ssä esitetään IDataView-muodossa, joka on joustava ja tehokas tapa kuvailla taulukollista dataa (esimerkiksi rivejä ja sarakkeita). IDataView-objektit voivat sisältää numeroita, tekstiä, totuusarvoja, vektoreita ja muuta. Voit ladata dataa tiedostoista tai reaaliaikaisista suoratoistolähteistä IDataView-muotoon.

LoadFromTextFile mahdollistaa datan lataamisen TXT-, CSV-, TSV- ja muiden tiedostomuotojen kautta.

IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);

LoadFromEnumerable mahdollistaa lataamisen muistissa olevista kokoelmista, JSON/XML, relaatio- ja ei-relaatiotietokannoista (esimerkiksi SQL, CosmosDB, MongoDB) ja monista muista tietolähteistä.

IDataView trainingData = mlContext.Data
.LoadFromEnumerable<SentimentInput>(inMemoryCollection);

Lisätietoja datan lataamisesta, -muodosta ja -lähteistä.

Datan muuntaminen (Transform data)

Useimmissa tapauksissa sinulla oleva data ei sovellu suoraan käytettäväksi koneoppimismallin kouluttamiseen.

// Esim. Muunna mielipideteksti numeerisiksi piirteiksi 

IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text .FeaturizeText("Features", "SentimentText");

Data muunnoksien (Data transformations) dokumentaatio

Valitse algoritmi

Kun käytät koneoppimista ja ML.NET:iä, sinun täytyy valita koneoppimistehtävä, joka sopii skenaarioosi. ML.NET tarjoaa yli 30 algoritmia (tai kouluttajaa) monenlaisiin ML-tehtäviin (Tehtävä/Algoritmi):

  • Binaariluokittelu (esimerkiksi, mielipideanalyysi) / AveragedPerceptronTrainer, SdcaLogisticRegressionBinaryTrainer
  • Moniluokkaluokittelu (esimerkiksi, aiheen kategorisointi) / LightGbmMulticlassTrainer, OneVersusAllTrainer
  • Regressio (esimerkiksi, hintaennustus) / LbfgsPoissonRegressionTrainer, FastTreeRegressionTrainer
  • Klusterointi (esimerkiksi, asiakassegmentointi) / KMeansTrainer
  • Poikkeavuuksien havaitseminen (esimerkiksi, shampoon myynnin piikki) / RandomizedPcaTrainer
  • Suosittelujärjestelmä (esimerkiksi, elokuvasuositukset) / MatrixFactorizationTrainer
  • Ranking (esimerkiksi, hakutulokset) / LightGbmRankingTrainer, FastTreeRankingTrainer

Esimerkki koodi:

IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
.AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName:
"Features"));

IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);

Algoritmien dokumentaatio

Mallin kouluttaminen

Määrittelemäsi datan muunnokset ja algoritmit suoritetaan vasta, kun kutsut Fit()-metodia (ML.NET:n viivästetyn latauksen lähestymistavan vuoksi). Tässä vaiheessa tapahtuu mallin koulutus.

Arvioija ottaa datan, oppii siitä ja luo muuntajan. Mallin koulutuksen tapauksessa koulutusdata on syöte ja koulutettu malli on tulos; koulutettu malli on siis muuntaja, joka muuttaa uuden datan syötepiirteet ulostuloprediktioiksi.

ITransformer model = pipeline.Fit(trainingData);

Lisätietoja mallin koulutuksesta

Mallin arviointi

ML.NET tarjoaa arvioijia, jotka arvioivat mallisi suorituskykyä monilla mittareilla:

  • Tarkkuus
  • Käyrän alainen alue (AUC)
  • R-Neliö
  • Keskineliövirheen neliöjuuri (RMSE)

// Tee ennusteita testidatasta
IDataView predictions = model.Transform(testDataView);

// Arvioi malli ja palauta metriikat
var metrics = mlContext.BinaryClassification.Evaluate(predictions, labelColumnName: "Sentiment");

// Tulosta tarkkuusmetriikka
Console.WriteLine("Accuracy" + metrics.Accuracy);

Mallin arviointi mittareiden dokumentaatio

Mallin käyttöönotto & käyttö

Voit tallentaa koulutetun mallisi binääritiedostona, jota voit sitten käyttää omassa .Net ohjelmassasi: mlContext.Model.Save(model, trainingData, "model.zip");

Kun olet tallentanut mallisi, niin voit ladata sen käyttöön .Net ohjelmassa:

MLContext mlContext = new MLContext(); 

DataViewSchema predictionPipelineSchema; 

ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);

Voit sitten käyttää ladattua mallia ennusteiden tekemiseen. Voit käyttää Prediction Engineä, joka on kätevä API, jota käytetään yksittäisten ennusteiden tekemiseen, tai Transform-menetelmää, jota käytetään eräennusteiden tekemiseen.

var predEngine = mlContext.Model.CreatePredictionEngine(model); 

SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" }; 

SentimentOutput result = predEngine.Predict(sampleComment); Console.WriteLine(result.Prediction);

Lisätietoa mallin tallentamisesta ja -käyttämisestä

ML.NET Esimerkki koodeja

Kattavia esimerkki C# koodeja ML.NET kehyhyksen löydät GitHubista

Tutorial, jolla pääset helposti alkuun