Zelfstudie: Een film aanbevelen met behulp van matrixfactorisatie met ML.NET

In deze zelfstudie ziet u hoe u een filmbeveeler bouwt met ML.NET in een .NET Core-consoletoepassing. In de stappen wordt gebruikgemaakt van C# en Visual Studio 2019.

In deze zelfstudie leert u het volgende:

  • Een machine learning-algoritme selecteren
  • Uw gegevens voorbereiden en laden
  • Een model bouwen en trainen
  • Een model evalueren
  • Een model implementeren en gebruiken

U vindt de broncode voor deze zelfstudie in de opslagplaats dotnet/samples .

Machine learning-werkstroom

U gebruikt de volgende stappen om uw taak uit te voeren, evenals andere ML.NET taak:

  1. Uw gegevens laden
  2. Uw model bouwen en trainen
  3. Uw model evalueren
  4. Het model gebruiken

Vereisten

Selecteer de juiste machine learning-taak

Er zijn verschillende manieren om problemen met aanbevelingen te benaderen, zoals het aanbevelen van een lijst met films of het aanbevelen van een lijst met gerelateerde producten, maar in dit geval voorspelt u welke waardering (1-5) een gebruiker aan een bepaalde film geeft en beveelt u die film aan als deze hoger is dan een gedefinieerde drempelwaarde (hoe hoger de waardering, hoe groter de kans dat een gebruiker een bepaalde film leuk vindt).

Een consoletoepassing maken

Een project maken

  1. Maak een C# -consoletoepassing met de naam MovieRecommender. Klik op de knop Next

  2. Kies .NET 6 als het framework dat u wilt gebruiken. Klik op de knop Maken.

  3. Maak een map met de naam Gegevens in uw project om de gegevensset op te slaan:

    Klik in Solution Explorer met de rechtermuisknop op het project en selecteerNieuwe maptoevoegen>. Typ 'Gegevens' en druk op Enter.

  4. Installeer de nuget-pakketten Microsoft.ML en Microsoft.ML.Recommender :

    Notitie

    In dit voorbeeld wordt de meest recente stabiele versie van de vermelde NuGet-pakketten gebruikt, tenzij anders vermeld.

    Klik in Solution Explorer met de rechtermuisknop op het project en klik op NuGet-pakketten beheren. Kies 'nuget.org' als pakketbron, selecteer het tabblad Bladeren , zoek naar Microsoft.ML, selecteer het pakket in de lijst en selecteer de knop Installeren . Selecteer de knop OK in het dialoogvenster Voorbeeld van wijzigingen en selecteer vervolgens de knop Ik ga akkoord in het dialoogvenster Licentie-acceptatie als u akkoord gaat met de licentievoorwaarden voor de vermelde pakketten. Herhaal deze stappen voor Microsoft.ML.Recommender.

  5. Voeg de volgende using instructies toe aan het begin van het bestand Program.cs :

    using Microsoft.ML;
    using Microsoft.ML.Trainers;
    using MovieRecommendation;
    

Uw gegevens downloaden

  1. Download de twee gegevenssets en sla deze op in de map Gegevens die u eerder hebt gemaakt:

    • Klik met de rechtermuisknop op recommendation-ratings-train.csv en selecteer 'Koppeling opslaan (of doel) als...'

    • Klik met de rechtermuisknop op recommendation-ratings-test.csv en selecteer 'Koppeling opslaan (of doel) als...'

      Zorg ervoor dat u de *.csv bestanden opslaat in de map Gegevens of verplaats de *.csv bestanden naar de map Gegevens nadat u deze ergens anders hebt opgeslagen.

  2. Klik in Solution Explorer met de rechtermuisknop op elk van de *.csv-bestanden en selecteer Eigenschappen. Wijzig onder Geavanceerd de waarde van Kopiëren naar uitvoermap in Kopiëren indien nieuwer.

    GIF van een gebruiker die kopiëren indien nieuwer selecteert in VS.

Uw gegevens laden

De eerste stap in het ML.NET proces is het voorbereiden en laden van uw modeltrainings- en testgegevens.

De aanbevelingsclassificatiegegevens worden gesplitst in Train en-gegevenssets Test . De Train gegevens worden gebruikt voor uw model. De Test gegevens worden gebruikt om voorspellingen te doen met uw getrainde model en de prestaties van het model te evalueren. Het is gebruikelijk om een 80/20-splitsing te hebben met Train gegevens en Test .

Hieronder ziet u een voorbeeld van de gegevens uit uw *.csv bestanden:

Schermopname van het voorbeeld van de CVS-gegevensset.

De *.csv-bestanden bevatten vier kolommen:

  • userId
  • movieId
  • rating
  • timestamp

In machine learning worden de kolommen die worden gebruikt om een voorspelling te doen Functies genoemd en wordt de kolom met de geretourneerde voorspelling het Label genoemd.

U wilt filmbeoordelingen voorspellen, dus de beoordelingskolom is de Label. De andere drie kolommen, userId, movieIden timestamp , worden allemaal Features gebruikt om de Labelte voorspellen.

Functies Label
userId rating
movieId
timestamp

Het is aan u om te bepalen welke Features worden gebruikt om de Labelte voorspellen. U kunt ook methoden zoals het belang van permutatiefuncties gebruiken om te helpen bij het selecteren van de beste Features.

In dit geval moet u de timestamp kolom elimineren als een Feature , omdat de tijdstempel niet echt van invloed is op de manier waarop een gebruiker een bepaalde film beoordeelt en dus niet zou bijdragen aan het maken van een nauwkeurigere voorspelling:

Functies Label
userId rating
movieId

Vervolgens moet u de gegevensstructuur voor de invoerklasse definiëren.

Voeg een nieuwe klasse toe aan uw project:

  1. Klik in Solution Explorer met de rechtermuisknop op het project en selecteer vervolgens Nieuw item toevoegen>.

  2. Selecteer in het dialoogvenster Nieuw item toevoegen de optie Klasse en wijzig het veld Naam in MovieRatingData.cs. Selecteer vervolgens de knop Toevoegen .

Het bestand MovieRatingData.cs wordt geopend in de code-editor. Voeg de volgende using instructie toe aan het begin van MovieRatingData.cs:

using Microsoft.ML.Data;

Maak een klasse met de naam MovieRating door de bestaande klassedefinitie te verwijderen en de volgende code toe te voegen in MovieRatingData.cs:

public class MovieRating
{
    [LoadColumn(0)]
    public float userId;
    [LoadColumn(1)]
    public float movieId;
    [LoadColumn(2)]
    public float Label;
}

MovieRating hiermee geeft u een invoergegevensklasse op. Het kenmerk LoadColumn geeft aan welke kolommen (per kolomindex) in de gegevensset moeten worden geladen. De userId kolommen en movieId zijn uw Features (de invoer die u het model geeft om de Labelte voorspellen) en de classificatiekolom is de Label kolom die u gaat voorspellen (de uitvoer van het model).

Maak een andere klasse, MovieRatingPrediction, om voorspelde resultaten weer te geven door de volgende code na de MovieRating klasse toe te voegen in MovieRatingData.cs:

public class MovieRatingPrediction
{
    public float Label;
    public float Score;
}

Vervang in Program.cs de Console.WriteLine("Hello World!") door de volgende code:

MLContext mlContext = new MLContext();

De mlContext-klasse is een startpunt voor alle ML.NET bewerkingen en als u initialiseert mlContext , wordt er een nieuwe ML.NET omgeving gemaakt die kan worden gedeeld met de werkstroomobjecten voor het maken van modellen. Het is conceptueel DBContext vergelijkbaar met in Entity Framework.

Maak onderaan het bestand een methode met de naam LoadData():

(IDataView training, IDataView test) LoadData(MLContext mlContext)
{

}

Notitie

Met deze methode krijgt u een fout totdat u in de volgende stappen een retourinstructie toevoegt.

Initialiseer uw gegevenspadvariabelen, laad de gegevens uit de *.csv-bestanden en retourneer de Train gegevens en Test als IDataView objecten door het volgende toe te voegen als de volgende regel code in LoadData():

var trainingDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-train.csv");
var testDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-test.csv");

IDataView trainingDataView = mlContext.Data.LoadFromTextFile<MovieRating>(trainingDataPath, hasHeader: true, separatorChar: ',');
IDataView testDataView = mlContext.Data.LoadFromTextFile<MovieRating>(testDataPath, hasHeader: true, separatorChar: ',');

return (trainingDataView, testDataView);

Gegevens in ML.NET worden weergegeven als een IDataView-interface. IDataView is een flexibele, efficiënte manier om tabelgegevens (numeriek en tekst) te beschrijven. Gegevens kunnen vanuit een tekstbestand of in realtime (bijvoorbeeld SQL-database of logboekbestanden) in een IDataView object worden geladen.

Het LoadFromTextFile() definieert het gegevensschema en leest het bestand in. Het neemt de gegevenspadvariabelen op en retourneert een IDataView. In dit geval geeft u het pad voor uw Test bestanden en Train op en geeft u zowel de koptekst van het tekstbestand op (zodat de kolomnamen correct kunnen worden gebruikt) als het gegevensscheidingsteken voor komma's (het standaardscheidingsteken is een tabblad).

Voeg de volgende code toe om uw LoadData() methode aan te roepen en de Train gegevens en Test te retourneren:

(IDataView trainingDataView, IDataView testDataView) = LoadData(mlContext);

Uw model bouwen en trainen

Maak de BuildAndTrainModel() methode, net na de LoadData() methode, met behulp van de volgende code:

ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)
{

}

Notitie

Met deze methode krijgt u een fout totdat u in de volgende stappen een retourinstructie toevoegt.

Definieer de gegevenstransformaties door de volgende code toe te voegen aan BuildAndTrainModel():

IEstimator<ITransformer> estimator = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIdEncoded", inputColumnName: "userId")
    .Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "movieIdEncoded", inputColumnName: "movieId"));

Omdat userId en movieId gebruikers en filmtitels vertegenwoordigen, geen echte waarden, gebruikt u de methode MapValueToKey() om elke userIdmovieId kolom te transformeren in een numerieke sleuteltypekolom Feature (een indeling die wordt geaccepteerd door aanbevelingsalgoritmen) en deze toe te voegen als nieuwe gegevenssetkolommen:

userId movieId Label userIdEncoded movieIdEncoded
1 1 4 userKey1 movieKey1
1 3 4 userKey1 movieKey2
1 6 4 userKey1 movieKey3

Kies het machine learning-algoritme en voeg dit toe aan de definities van de gegevenstransformatie door het volgende toe te voegen als de volgende regel code in BuildAndTrainModel():

var options = new MatrixFactorizationTrainer.Options
{
    MatrixColumnIndexColumnName = "userIdEncoded",
    MatrixRowIndexColumnName = "movieIdEncoded",
    LabelColumnName = "Label",
    NumberOfIterations = 20,
    ApproximationRank = 100
};

var trainerEstimator = estimator.Append(mlContext.Recommendation().Trainers.MatrixFactorization(options));

MatrixFactorizationTrainer is uw trainingsalgoritmen voor aanbevelingen. Matrix Factorization is een veelgebruikte benadering voor aanbevelingen wanneer u gegevens hebt over de manier waarop gebruikers producten in het verleden hebben beoordeeld, wat het geval is voor de gegevenssets in deze zelfstudie. Er zijn andere aanbevelingsalgoritmen voor wanneer u verschillende gegevens beschikbaar hebt (zie de sectie Andere aanbevelingsalgoritmen hieronder voor meer informatie).

In dit geval gebruikt het Matrix Factorization algoritme een methode genaamd 'collaborative filtering', die ervan uitgaat dat als gebruiker 1 dezelfde mening heeft als gebruiker 2 over een bepaald probleem, gebruiker 1 waarschijnlijk hetzelfde voelt als gebruiker 2 over een ander probleem.

Als bijvoorbeeld gebruiker 1 en gebruiker 2 films op dezelfde manier beoordelen, zal gebruiker 2 eerder genieten van een film die gebruiker 1 heeft bekeken en hoog heeft beoordeeld:

Incredibles 2 (2018) The Avengers (2012) Guardians of the Galaxy (2014)
Gebruiker 1 Bekeken en leuk gevonden film Bekeken en leuk gevonden film Bekeken en leuk gevonden film
Gebruiker 2 Bekeken en leuk gevonden film Bekeken en leuk gevonden film Heeft niet gekeken -- FILM AANBEVELEN

De Matrix Factorization trainer heeft verschillende opties, waarover u meer kunt lezen in de sectie Algoritme hyperparameters hieronder.

Pas het model aan de Train gegevens aan en retourneer het getrainde model door het volgende toe te voegen als de volgende regel code in de BuildAndTrainModel() methode:

Console.WriteLine("=============== Training the model ===============");
ITransformer model = trainerEstimator.Fit(trainingDataView);

return model;

Met de methode Fit() wordt uw model getraind met de opgegeven trainingsgegevensset. Technisch gezien worden de Estimator definities uitgevoerd door de gegevens te transformeren en de training toe te passen, en wordt het getrainde model geretourneerd. Dit is een Transformer.

Zie Wat is ML.NET en hoe werkt het? voor meer informatie over de werkstroom voor modeltraining in ML.NET.

Voeg het volgende toe als de volgende regel code onder de aanroep van de LoadData() methode om uw BuildAndTrainModel() methode aan te roepen en het getrainde model te retourneren:

ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);

Uw model evalueren

Nadat u uw model hebt getraind, gebruikt u uw testgegevens om te evalueren hoe uw model presteert.

Maak de EvaluateModel() methode, net na de BuildAndTrainModel() methode, met behulp van de volgende code:

void EvaluateModel(MLContext mlContext, IDataView testDataView, ITransformer model)
{

}

Transformeer de Test gegevens door de volgende code toe te voegen aan EvaluateModel():

Console.WriteLine("=============== Evaluating the model ===============");
var prediction = model.Transform(testDataView);

De methode Transform() maakt voorspellingen voor meerdere opgegeven invoerrijen van een testgegevensset.

Evalueer het model door het volgende toe te voegen als de volgende regel code in de EvaluateModel() methode:

var metrics = mlContext.Regression.Evaluate(prediction, labelColumnName: "Label", scoreColumnName: "Score");

Zodra u de voorspellingsset hebt, evalueert de methode Evaluate() het model, waarmee de voorspelde waarden worden vergeleken met de werkelijke Labels waarden in de testgegevensset en metrische gegevens worden geretourneerd over hoe het model presteert.

Druk uw metrische evaluatiegegevens af naar de console door het volgende toe te voegen als de volgende regel code in de EvaluateModel() methode:

Console.WriteLine("Root Mean Squared Error : " + metrics.RootMeanSquaredError.ToString());
Console.WriteLine("RSquared: " + metrics.RSquared.ToString());

Voeg het volgende toe als de volgende regel code onder de aanroep van de BuildAndTrainModel() methode om uw EvaluateModel() methode aan te roepen:

EvaluateModel(mlContext, testDataView, model);

De uitvoer tot nu toe moet er ongeveer uitzien als de volgende tekst:

=============== Training the model ===============
iter      tr_rmse          obj
   0       1.5403   3.1262e+05
   1       0.9221   1.6030e+05
   2       0.8687   1.5046e+05
   3       0.8416   1.4584e+05
   4       0.8142   1.4209e+05
   5       0.7849   1.3907e+05
   6       0.7544   1.3594e+05
   7       0.7266   1.3361e+05
   8       0.6987   1.3110e+05
   9       0.6751   1.2948e+05
  10       0.6530   1.2766e+05
  11       0.6350   1.2644e+05
  12       0.6197   1.2541e+05
  13       0.6067   1.2470e+05
  14       0.5953   1.2382e+05
  15       0.5871   1.2342e+05
  16       0.5781   1.2279e+05
  17       0.5713   1.2240e+05
  18       0.5660   1.2230e+05
  19       0.5592   1.2179e+05
=============== Evaluating the model ===============
Rms: 0.994051469730769
RSquared: 0.412556298844873

Deze uitvoer bevat 20 iteraties. In elke iteratie neemt de meting van de fout af en convergeert deze steeds dichter bij 0.

De root of mean squared error (RMS of RMSE) wordt gebruikt om de verschillen te meten tussen de voorspelde waarden van het model en de waargenomen waarden van de testgegevensset. Technisch gezien is het de vierkantswortel van het gemiddelde van de kwadraten van de fouten. Hoe lager het is, hoe beter het model is.

R Squared geeft aan hoe goed gegevens in een model passen. Varieert van 0 tot 1. Een waarde van 0 betekent dat de gegevens willekeurig zijn of anderszins niet geschikt zijn voor het model. Een waarde van 1 betekent dat het model exact overeenkomt met de gegevens. U wilt dat uw R Squared score zo dicht mogelijk bij 1 ligt.

Het bouwen van succesvolle modellen is een iteratief proces. Dit model heeft in eerste instantie een lagere kwaliteit omdat in de zelfstudie kleine gegevenssets worden gebruikt om snelle modeltraining te bieden. Als u niet tevreden bent met de kwaliteit van het model, kunt u proberen deze te verbeteren door grotere trainingsgegevenssets te bieden of door verschillende trainingsalgoritmen met verschillende hyperparameters voor elk algoritme te kiezen. Bekijk de sectie Uw model verbeteren hieronder voor meer informatie.

Het model gebruiken

U kunt nu uw getrainde model gebruiken om voorspellingen te doen over nieuwe gegevens.

Maak de UseModelForSinglePrediction() methode, net na de EvaluateModel() methode, met behulp van de volgende code:

void UseModelForSinglePrediction(MLContext mlContext, ITransformer model)
{

}

Gebruik de PredictionEngine om de classificatie te voorspellen door de volgende code toe te voegen aan UseModelForSinglePrediction():

Console.WriteLine("=============== Making a prediction ===============");
var predictionEngine = mlContext.Model.CreatePredictionEngine<MovieRating, MovieRatingPrediction>(model);

De PredictionEngine is een gemaks-API, waarmee u een voorspelling kunt uitvoeren op één exemplaar van gegevens. PredictionEngine is niet thread-safe. Het is acceptabel om te gebruiken in omgevingen met één thread of prototype. Voor verbeterde prestaties en threadveiligheid in productieomgevingen gebruikt u de PredictionEnginePool service, waarmee een ObjectPool van PredictionEngine objecten wordt gemaakt voor gebruik in uw toepassing. Raadpleeg deze handleiding over het gebruik PredictionEnginePool in een ASP.NET Core Web-API.

Notitie

PredictionEnginePool de service-extensie is momenteel in preview.

Maak een exemplaar van MovieRating aangeroepen testInput en geef deze door aan de voorspellingsengine door het volgende toe te voegen als de volgende coderegels in de UseModelForSinglePrediction() methode:

var testInput = new MovieRating { userId = 6, movieId = 10 };

var movieRatingPrediction = predictionEngine.Predict(testInput);

De functie Predict() doet een voorspelling op één kolom met gegevens.

U kunt vervolgens de Score, of de voorspelde classificatie, gebruiken om te bepalen of u de film met movieId 10 wilt aanbevelen aan gebruiker 6. Hoe hoger de Score, hoe groter de kans dat een gebruiker een bepaalde film leuk vinden. Stel dat u in dit geval films met een voorspelde waardering van > 3,5 aanbeveelt.

Als u de resultaten wilt afdrukken, voegt u het volgende toe als de volgende coderegels in de UseModelForSinglePrediction() methode:

if (Math.Round(movieRatingPrediction.Score, 1) > 3.5)
{
    Console.WriteLine("Movie " + testInput.movieId + " is recommended for user " + testInput.userId);
}
else
{
    Console.WriteLine("Movie " + testInput.movieId + " is not recommended for user " + testInput.userId);
}

Voeg het volgende toe als de volgende regel code na de aanroep van de EvaluateModel() methode om uw UseModelForSinglePrediction() methode aan te roepen:

UseModelForSinglePrediction(mlContext, model);

De uitvoer van deze methode moet er ongeveer uitzien als in de volgende tekst:

=============== Making a prediction ===============
Movie 10 is recommended for user 6

Uw model opslaan

Als u uw model wilt gebruiken om voorspellingen te doen in toepassingen voor eindgebruikers, moet u het model eerst opslaan.

Maak de SaveModel() methode, net na de UseModelForSinglePrediction() methode, met behulp van de volgende code:

void SaveModel(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model)
{

}

Sla het getrainde model op door de volgende code toe te voegen aan de SaveModel() methode:

var modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "MovieRecommenderModel.zip");

Console.WriteLine("=============== Saving the model to a file ===============");
mlContext.Model.Save(model, trainingDataViewSchema, modelPath);

Met deze methode wordt uw getrainde model opgeslagen in een .zip-bestand (in de map Gegevens), dat vervolgens kan worden gebruikt in andere .NET-toepassingen om voorspellingen te doen.

Voeg het volgende toe als de volgende regel code na de aanroep van de UseModelForSinglePrediction() methode om uw SaveModel() methode aan te roepen:

SaveModel(mlContext, trainingDataView.Schema, model);

Uw opgeslagen model gebruiken

Zodra u het getrainde model hebt opgeslagen, kunt u het model in verschillende omgevingen gebruiken. Zie Getrainde modellen opslaan en laden voor meer informatie over het operationeel maken van een getraind machine learning-model in apps.

Resultaten

Nadat u de bovenstaande stappen hebt uitgevoerd, voert u de console-app uit (Ctrl + F5). De resultaten van de bovenstaande voorspelling moeten er ongeveer als volgt uitzien. Mogelijk ziet u waarschuwingen of verwerking van berichten, maar deze berichten zijn voor de duidelijkheid verwijderd uit de volgende resultaten.

=============== Training the model ===============
iter      tr_rmse          obj
   0       1.5382   3.1213e+05
   1       0.9223   1.6051e+05
   2       0.8691   1.5050e+05
   3       0.8413   1.4576e+05
   4       0.8145   1.4208e+05
   5       0.7848   1.3895e+05
   6       0.7552   1.3613e+05
   7       0.7259   1.3357e+05
   8       0.6987   1.3121e+05
   9       0.6747   1.2949e+05
  10       0.6533   1.2766e+05
  11       0.6353   1.2636e+05
  12       0.6209   1.2561e+05
  13       0.6072   1.2462e+05
  14       0.5965   1.2394e+05
  15       0.5868   1.2352e+05
  16       0.5782   1.2279e+05
  17       0.5713   1.2227e+05
  18       0.5637   1.2190e+05
  19       0.5604   1.2178e+05
=============== Evaluating the model ===============
Rms: 0.977175077487166
RSquared: 0.43233349213192
=============== Making a prediction ===============
Movie 10 is recommended for user 6
=============== Saving the model to a file ===============

Gefeliciteerd U hebt nu een machine learning-model gebouwd voor het aanbevelen van films. U vindt de broncode voor deze zelfstudie in de opslagplaats dotnet/samples .

Uw model verbeteren

Er zijn verschillende manieren waarop u de prestaties van uw model kunt verbeteren, zodat u nauwkeurigere voorspellingen kunt krijgen.

Gegevens

Als u meer trainingsgegevens toevoegt met voldoende voorbeelden voor elke gebruiker en film-id, kunt u de kwaliteit van het aanbevelingsmodel verbeteren.

Kruisvalidatie is een techniek voor het evalueren van modellen die gegevens willekeurig opsplitsen in subsets (in plaats van testgegevens uit de gegevensset te extraheren, zoals u in deze zelfstudie hebt gedaan) en een aantal groepen als testgegevens gebruikt. Deze methode presteert beter dan het maken van een train-test splitsing in termen van modelkwaliteit.

Functies

In deze zelfstudie gebruikt u alleen de drie Features (user id, movie iden rating) die door de gegevensset worden geleverd.

Hoewel dit een goed begin is, wilt u in werkelijkheid mogelijk andere kenmerken toevoegen of Features (bijvoorbeeld leeftijd, geslacht, geografische locatie, enzovoort) als deze zijn opgenomen in de gegevensset. Door relevantere Features opties toe te voegen, kunt u de prestaties van uw aanbevelingsmodel verbeteren.

Als u niet zeker weet wat Features het meest relevant is voor uw machine learning-taak, kunt u ook gebruikmaken van FCC (Feature Contribution Calculation) en het belang van permutatiefuncties, die ML.NET biedt om de meest invloedrijke Featureste ontdekken.

Algoritme hyperparameters

Hoewel ML.NET goede standaardtrainingsalgoritmen biedt, kunt u de prestaties verder verfijnen door de hyperparameters van het algoritme te wijzigen.

Voor Matrix Factorizationkunt u experimenteren met hyperparameters zoals NumberOfIterations en ApproximationRank om te zien of dat betere resultaten oplevert.

In deze zelfstudie zijn de algoritmeopties bijvoorbeeld:

var options = new MatrixFactorizationTrainer.Options
{
    MatrixColumnIndexColumnName = "userIdEncoded",
    MatrixRowIndexColumnName = "movieIdEncoded",
    LabelColumnName = "Label",
    NumberOfIterations = 20,
    ApproximationRank = 100
};

Andere aanbevelingsalgoritmen

Het matrixfactorisatie-algoritme met gezamenlijke filtering is slechts één benadering voor het uitvoeren van filmaanbeveling. In veel gevallen beschikt u mogelijk niet over de beoordelingsgegevens en hebt u alleen de filmgeschiedenis van gebruikers. In andere gevallen hebt u mogelijk meer dan alleen de beoordelingsgegevens van de gebruiker.

Algoritme Scenario Voorbeeld
Factorisatie van één klassematrix Gebruik dit als u alleen userId en movieId hebt. Deze stijl van aanbeveling is gebaseerd op het scenario voor co-aankoop of producten die vaak samen worden gekocht, wat betekent dat klanten een set producten worden aanbevolen op basis van hun eigen inkoopordergeschiedenis. >Probeer het eens
Veldbewuste factorisatiemachines Gebruik dit om aanbevelingen te doen wanneer u meer functies hebt dan userId, productId en classificatie (zoals productbeschrijving of productprijs). Deze methode maakt ook gebruik van een gezamenlijke filtermethode. >Probeer het eens

Nieuw gebruikersscenario

Een veelvoorkomend probleem bij het filteren op samenwerking is het probleem met een koude start, namelijk wanneer u een nieuwe gebruiker hebt zonder eerdere gegevens waaruit deducties kunnen worden afgeleid. Dit probleem wordt vaak opgelost door nieuwe gebruikers te vragen een profiel te maken en bijvoorbeeld films te beoordelen die ze in het verleden hebben gezien. Hoewel deze methode een belasting voor de gebruiker vormt, biedt deze enkele begingegevens voor nieuwe gebruikers zonder beoordelingsgeschiedenis.

Resources

De gegevens die in deze zelfstudie worden gebruikt, zijn afgeleid van MovieLens Dataset.

Volgende stappen

In deze zelfstudie heeft u het volgende geleerd:

  • Een machine learning-algoritme selecteren
  • Uw gegevens voorbereiden en laden
  • Een model bouwen en trainen
  • Een model evalueren
  • Een model implementeren en gebruiken

Ga naar de volgende zelfstudie voor meer informatie