Voorspellen met ML.NET

In de huidige tijd hoor je veel over AI en Large Language Models en Machine Learning, maar hoe kan je Machine Learning modellen nu in je eigen .NET applicaties toepassen?
Uitleg over het verschil tussen Machine Learning modellen en Large Language Modellen valt buiten de scope van dit artikel, maar wil je hier meer over lezen dan kan dat hier.
In dit artikel volgen we de Microsoft learn tutorial voor het voorspellen van taxi tarieven in New-York city. Om een voorspellend model te kunnen gebruiken in je .NET applicatie dien je eerst een model te genereren en te trainen. Voor dit genereren en trainen van het model gebruik je ML.NET. In Visual Studio heb je de beschikking over een specifieke ML.NET Model builder template, waarmee je begeleid wordt door de stappen om een model op te bouwen. Dit artikel wil laten zien hoe redelijk eenvoudig dit is te bewerkstelligen binnen de Microsoft .NET speelveld. In dit artikel zullen we niet dieper ingaan op de interne werking van de modellen en het trainen van de modellen.

Prerequisites

Om gebruik te maken van ML.NET en de model-builder binnen Visual Studio dien je de ‘ML NET Model Builder’ optie (onder Desktop development) te hebben geselecteerd in je installatie configuratie.

prerequisites ml.net

Onze solution

Maak nu een console applicatie aan genaamd ‘TaxiFairTrainer’. Voeg nu een folder genaamd ‘Data’ toe aan je project. In deze folder plaatsen we onze dataset welke we gebruiken om ons model te trainen.
Download hier de dataset van New-York city taxi tarieven en sla deze op in de aangemaakte ‘Data’ folder.
Stel nu de eigenschap van dit bestand (rechtsklik op csv bestand en selecteer ‘Properties’) in op ‘Copy if newer’.

properties ml.net

Figuur 1 Instellen eigenschappen van bestand

Het databestand heeft de volgende kolommen:
• vendor_id: Dit is een feature.
• rate_code: Dit is een feature.
• passenger_count: Dit is een feature.
• trip_time_in_secs: Dit is geen feature. Deze kolom dienen we uit te sluiten van ons model, omdat we niet van tevoren weten hoelang een reis gaat duren.
• trip_distance: Dit is een feature.
• payment_type: Dit is een feature (cash of met kaart).
• fare_amount: Dit is een label (Dit willen we dus gaan voorspellen)

Nu we een dataset hebben kunnen we aan de slag om ons model te trainen. Hiervoor gaan we de Model Builder van ML.NET gebruiken. Om een Machine Learning model toe te voegen, doe je een rechtsklik op het TaxiFairTrainer project en kies voor ‘Add > Machine Learning Model’

toevoegen ml model stap 1

Figuur 2 Toevoegen ML model – stap 1

Geef het .mbconfig bestand de naam ‘TaxiFarePrediction’ en klik op de ‘Add’ knop.

toevoegen ml model stap 2

Figuur 3 Toevoegen ML model – stap 2

Nu krijgen we de optie om het type model te kiezen, we gaan hier voor het voorspellende model, kies hiervoor het scenario genaamd ‘Value prediction’.

selecteer scenario

Figuur 4 Selecteer scenario

Vervolgens selecteren we de environment waarop de training gedraaid dient te gaan worden. De beschikbare opties hier zijn afhankelijk van het type scenario dat er is gekozen. Selecteer de gewenste omgeving en klik op ‘Next step’.

selecteer training omgeving

Figuur 5 Selecteer training omgeving

Nu komen we aan bij de stap waarop we onze gedownloade taxi tarieven gaan gebruiken. Selecteer nu het bestand wat we in de Data folder hebben opgeslagen.

data preparatie

Figuur 6 Data preparatie

Als kolom om te voorspellen (het zogenoemde label) selecteren we de kolom ‘fare_amount’. Zoals eerder al aangegeven kan de kolom ‘trip_time_in_secs’ niet worden meegenomen in het model aangezien dit niet een van tevoren te bepalen waarde is. Via de optie ‘Advanced data options’ kunnen we deze kolom uit het model halen, door hem op ‘Ignore’ te zetten.

advanced data opties

Figuur 7 Advanced data opties

Nu zijn we klaar om ons model te gaan trainen. De trainingstijd en de data in de aangeleverde dataset zijn bepalend voor de resultaten in de voorspellingen welke we op een later moment gaan laten uitvoeren door ons getrainde model.
Voor nu laten we de instellingen op de default waardes staan en klikken op ‘Start training’. Er zijn nog diverse ‘advanced trainings’ opties in te stellen, maar die vallen voor nu buiten de scope van dit artikel.
De model-builder zal tijdens de training diverse zogenoemde ‘Trainers’ gebruiken om te kunnen bepalen welke trainingsmethode het beste resultaat oplevert.
Na het trainen kan je je model uit proberen en eventueel opnieuw en wat langer trainen als je dit noodzakelijk acht.

model evaluatie

Figuur 8 Model evaluatie

Nu je model gereed is, kan je het gaan gebruiken in een .NET applicatie. In de volgende stap kan je kiezen uit toepassen in een console applicatie of toepassen in een webapi applicatie. Met de volgende code snippet kan je je model gaan gebruiken in de door jouw gewenste .NET applicatie.

//LOAD SAMPLE DATA
VAR SAMPLEDATA = NEW TAXIFAREPREDICTION.MODELINPUT()
{
VENDOR_ID = @”CMT”,
RATE_CODE = 1F,
PASSENGER_COUNT = 1F,
TRIP_DISTANCE = 15F,
PAYMENT_TYPE = @”CRD”,
};

//LOAD MODEL AND PREDICT OUTPUT
VAR RESULT = TAXIFAREPREDICTION.PREDICT(SAMPLEDATA);

Ik heb ervoor gekozen om er een user interface aan toe te voegen door mijn model te gebruiken in een eenvoudige Blazor applicatie.

blazor UI

Figuur 9 Blazor UI

De broncode hiervoor is terug te vinden op github.
In dit artikel hebben we laten zien hoe eenvoudig het toepassen van Machine Learning in .NET applicaties is met behulp van de ML.NET library. Hopelijk is dit artikel een inspiratie geweest om zelf aan de slag te gaan met je eigen modellen.