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:
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
Maak een C# -consoletoepassing met de naam MovieRecommender. Klik op de knop Next
Kies .NET 6 als het framework dat u wilt gebruiken. Klik op de knop Maken.
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.
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.
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
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.
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.
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:
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
, movieId
en timestamp
, worden allemaal Features
gebruikt om de Label
te voorspellen.
Functies | Label |
---|---|
userId |
rating |
movieId |
|
timestamp |
Het is aan u om te bepalen welke Features
worden gebruikt om de Label
te 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:
Klik in Solution Explorer met de rechtermuisknop op het project en selecteer vervolgens Nieuw item toevoegen>.
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 Label
te 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 userId
movieId
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 id
en 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 Features
te 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 Factorization
kunt 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