ML.NET koneoppimisen malli omaan .Net sovellukseesi
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);
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