Oktatóanyag: Filmajánló létrehozása mátrixfaktorozással ML.NET

Ez az oktatóanyag bemutatja, hogyan hozhat létre filmajánlót ML.NET egy .NET Core-konzolalkalmazásban. A lépések a C# és a Visual Studio 2019 használatát használják.

Eben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Gépi tanulási algoritmus kiválasztása
  • Adatok előkészítése és betöltése
  • Modell létrehozása és betanítása
  • Modell kiértékelése
  • Modell üzembe helyezése és felhasználása

Az oktatóanyag forráskódját a dotnet/samples adattárban találja.

Gépi tanulási munkafolyamat

A következő lépésekkel hajthatja végre a feladatot, valamint az egyéb ML.NET feladatokat:

  1. Adatok betöltése
  2. A modell összeállítása és betanítása
  3. A modell értékelése
  4. Saját modell használata

Előfeltételek

Válassza ki a megfelelő gépi tanulási feladatot

Többféleképpen is megközelítheti a javaslatok problémáit, például a filmek listájának ajánlását vagy a kapcsolódó termékek listájának ajánlását, de ebben az esetben előrejelzi, hogy a felhasználó milyen minősítést (1-5) ad egy adott filmnek, és azt javasolja, hogy a film magasabb, mint egy meghatározott küszöbérték (minél magasabb az értékelés, annál nagyobb annak a valószínűsége, hogy egy felhasználó kedvel egy adott filmet).

Konzolalkalmazás létrehozása

Projekt létrehozása

  1. Hozzon létre egy "MovieRecommender" nevű C# -konzolalkalmazást . Kattintson a Tovább gombra.

  2. Válassza a .NET 6-ot a használni kívánt keretrendszerként. Kattintson a Létrehozás gombra.

  3. Hozzon létre egy Data nevű könyvtárat a projektben az adatkészlet tárolásához:

    A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza azÚj mappahozzáadása> lehetőséget. Írja be az "Adatok" kifejezést, és nyomja le az Enter billentyűt.

  4. Telepítse a Microsoft.ML és a Microsoft.ML.Recommender NuGet-csomagokat:

    Megjegyzés

    Ez a minta az említett NuGet-csomagok legújabb stabil verzióját használja, hacsak másként nem rendelkezik.

    A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget. Válassza a "nuget.org" lehetőséget a Csomag forrásaként, válassza a Tallózás lapot, keresse meg a Microsoft.ML, jelölje ki a csomagot a listában, és válassza a Telepítés gombot. Válassza az OK gombot a Változások előnézete párbeszédpanelen, majd válassza az Elfogadom gombot a Licenc elfogadása párbeszédpanelen, ha elfogadja a felsorolt csomagok licencfeltételét. Ismételje meg ezeket a lépéseket a Microsoft.ML.Recommender esetében.

  5. Adja hozzá a következő using utasításokat a Program.cs fájl tetején:

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

Adatok letöltése

  1. Töltse le a két adathalmazt, és mentse őket a korábban létrehozott Adatok mappába:

    • Kattintson a jobb gombbal arecommendation-ratings-train.csv , és válassza a "Hivatkozás mentése (vagy cél) másként..." lehetőséget.

    • Kattintson a jobb gombbal arecommendation-ratings-test.csv , és válassza a "Hivatkozás mentése (vagy cél) másként..." lehetőséget.

      Győződjön meg arról, hogy a *.csv fájlokat az Adatok mappába menti, vagy ha máshová menti, helyezze át a *.csv fájlokat az Adatok mappába.

  2. A Megoldáskezelőben kattintson a jobb gombbal az egyes *.csv fájlokra, és válassza a Tulajdonságok lehetőséget. A Speciális területen módosítsa a Másolás kimeneti könyvtárra értékét másolásra, ha újabb.

    A másolást választó felhasználó GIF-fájlja, ha újabb a VS-ben.

Adatok betöltése

A ML.NET folyamat első lépése a modell betanítási és tesztelési adatainak előkészítése és betöltése.

A javaslatok minősítési adatai felosztásra Train és Test adathalmazokra oszlanak. Az Train adatok a modellnek megfelelően lesznek felhasználva. Az Test adatokkal előrejelzéseket készíthet a betanított modellel, és kiértékelheti a modell teljesítményét. Gyakran előfordul, hogy a 80/20 felosztás és TrainTest az adatok.

Az alábbiakban a *.csv fájlok adatainak előnézete látható:

Képernyőkép a CVS-adathalmaz előnézetéről.

A *.csv fájlokban négy oszlop található:

  • userId
  • movieId
  • rating
  • timestamp

A gépi tanulásban az előrejelzéshez használt oszlopok neve Szolgáltatások, a visszaadott előrejelzést tartalmazó oszlop neve Pedig Címke.

Filmbesorolásokat szeretne előrejelezni, ezért az értékelés oszlopa a Label. A másik három oszlop, a userId, movieIdés timestamp mind Features az előrejelzésére szolgálnak.Label

Funkciók Címke
userId rating
movieId
timestamp

Ön dönti el, hogy melyiket Features használja a előrejelzéshez Label. Az olyan módszereket is használhatja, mint a permutáció funkció fontossága , hogy segítsen kiválasztani a legjobbat Features.

Ebben az esetben ki kell küszöbölnie az timestamp oszlopot, Feature mert az időbélyeg nem befolyásolja igazán, hogy egy felhasználó hogyan értékeli egy adott filmet, és így nem járul hozzá a pontosabb előrejelzéshez:

Funkciók Címke
userId rating
movieId

Ezután meg kell határoznia az adatstruktúrát a bemeneti osztályhoz.

Adjon hozzá egy új osztályt a projekthez:

  1. A Megoldáskezelőben kattintson a jobb gombbal a projektre, majd válassza az Új elem hozzáadása >lehetőséget.

  2. Az Új elem hozzáadása párbeszédpanelen válassza az Osztály lehetőséget, és módosítsa a Név mezőt MovieRatingData.cs névre. Ezután válassza a Hozzáadás gombot.

Megnyílik a MovieRatingData.cs fájl a kódszerkesztőben. Adja hozzá a következő usingutasítást a MovieRatingData.cs elejéhez:

using Microsoft.ML.Data;

Hozzon létre egy nevű MovieRating osztályt úgy, hogy eltávolítja a meglévő osztálydefiníciót, és hozzáadja a következő kódot a MovieRatingData.cs fájlhoz:

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

MovieRating bemeneti adatosztályt ad meg. A LoadColumn attribútum határozza meg, hogy az adathalmaz mely oszlopait (oszlopindex alapján) kell betölteni. A userId és movieId az oszlop az Ön Features (a bemenetek, amelyeket a modellnek ad az előrejelzéshez Label), a minősítési oszlop pedig az Label , amelyet előre jelez (a modell kimenete).

Hozzon létre egy másik osztályt( MovieRatingPrediction) az előrejelzett eredmények megjelenítéséhez a következő kód hozzáadásával a MovieRatingMovieRatingData.cs osztály után:

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

A Program.cs fájlban cserélje le a Console.WriteLine("Hello World!") kódot a következő kódra:

MLContext mlContext = new MLContext();

Az MLContext osztály az összes ML.NET művelet kiindulópontja, és az inicializálás mlContext egy új ML.NET környezetet hoz létre, amely megosztható a modelllétrehozási munkafolyamat-objektumok között. Ez fogalmilag hasonló az Entity Frameworkhez DBContext .

A fájl alján hozzon létre egy nevű metódust LoadData():

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

}

Megjegyzés

Ez a metódus hibaüzenetet ad, amíg a következő lépésekben nem ad hozzá egy visszatérési utasítást.

Inicializálja az adatelérésiút-változókat, töltse be az adatokat a *.csv fájlokból, és adja vissza az Train és Test az adatokat objektumként IDataView . Ehhez adja hozzá a következő kódot a következő kódsorként 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);

A ML.NET adatai IDataView-felületként jelennek meg. IDataView rugalmas, hatékony módja a táblázatos adatok (numerikus és szöveges) leírásának. Az adatok betölthetők szöveges fájlból vagy valós időben (például SQL-adatbázisból vagy naplófájlokból) egy IDataView objektumba.

A LoadFromTextFile() meghatározza az adatsémát, és beolvassa a fájlt. Az adatútvonal változóit veszi fel, és egy IDataViewértéket ad vissza. Ebben az esetben meg kell adnia a és Train a fájlok elérési útjátTest, és meg kell adnia a szövegfájl fejlécét (így megfelelően használhatja az oszlopneveket) és a vessző karakter adatelválasztóját (az alapértelmezett elválasztó egy lap).

Adja hozzá a következő kódot a metódus meghívásáhozLoadData(), és adja vissza a és Test az Train adatokat:

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

A modell összeállítása és betanítása

Hozza létre a metódust BuildAndTrainModel() közvetlenül a LoadData() metódus után a következő kóddal:

ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)
{

}

Megjegyzés

Ez a metódus hibaüzenetet ad, amíg a következő lépésekben nem ad hozzá egy visszatérési utasítást.

Az adatátalakítások definiálásához adja hozzá a következő kódot a következőhöz BuildAndTrainModel():

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

Mivel userId a felhasználókat és movieId a mozgóképcímeket jelöli, nem a valós értékeket, a MapValueToKey() metódussal mindegyiket userIdmovieId numerikus kulcstípusú Feature oszlopmá alakíthatja (a javaslati algoritmusok által elfogadott formátumot), és új adathalmazoszlopokként adja hozzá őket:

userId movieId Címke userIdEncoded movieIdEncoded
1 1 4 userKey1 movieKey1
1 3 4 userKey1 movieKey2
1 6 4 userKey1 movieKey3

Válassza ki a gépi tanulási algoritmust, és fűzze hozzá az adatátalakítási definíciókhoz a következő kódsor BuildAndTrainModel()hozzáadásával:

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

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

A MatrixFactorizationTrainer a javaslat betanítási algoritmusa. A Matrix Factorization a javaslatok gyakori megközelítése, ha olyan adatokkal rendelkezik, amelyek alapján a felhasználók a múltban értékelték a termékeket, ez az oktatóanyagban szereplő adathalmazok esetében is így van. Vannak más javaslati algoritmusok is, ha különböző adatok érhetők el (további információért lásd az alábbi Egyéb javaslati algoritmusok szakaszt).

Ebben az esetben az Matrix Factorization algoritmus egy "együttműködési szűrés" nevű módszert használ, amely feltételezi, hogy ha az 1. felhasználónak ugyanaz a véleménye, mint a 2. felhasználónak egy adott problémáról, akkor az 1. felhasználó valószínűleg ugyanúgy érzi magát, mint a 2. felhasználó egy másik problémáról.

Ha például az 1. felhasználó és a 2. felhasználó hasonlóan értékeli a filmeket, akkor a 2. felhasználó nagyobb valószínűséggel élvez egy olyan filmet, amelyet az 1. felhasználó megnézett és magasra értékelt:

Incredibles 2 (2018) The Avengers (2012) Guardians of the Galaxy (2014)
1. felhasználó Megtekintett és kedvelt film Megtekintett és kedvelt film Megtekintett és kedvelt film
2. felhasználó Megtekintett és kedvelt film Megtekintett és kedvelt film Nem nézték meg -- AJÁNLOTT film

A Matrix Factorization tréner számos beállítással rendelkezik, amelyekről az alábbi Algoritmus hiperparaméterek című szakaszban olvashat bővebben.

Illesztse a modellt az Train adatokhoz, és adja vissza a betanított modellt úgy, hogy a metódus következő kódsoraként adja hozzá a BuildAndTrainModel() következőt:

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

return model;

A Fit() metódus a megadott betanítási adatkészlettel tanítja be a modellt. Technikailag végrehajtja a definíciókat az Estimator adatok átalakításával és a betanítás alkalmazásával, és visszaadja a betanított modellt, amely egy Transformer.

A ML.NET modell betanítási munkafolyamatával kapcsolatos további információkért lásd: Mi az ML.NET és hogyan működik?

A metódus meghívásához BuildAndTrainModel() és a betanított modell visszaadásához adja hozzá a következő kódsort a LoadData() metódus hívása alatt:

ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);

A modell értékelése

Miután betanította a modellt, a tesztadatok használatával értékelje ki, hogyan teljesít a modell.

Hozza létre a metódust EvaluateModel() közvetlenül a BuildAndTrainModel() metódus után a következő kóddal:

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

}

Alakítsa át az Test adatokat a következő kód EvaluateModel()hozzáadásával:

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

A Transform() metódus előrejelzéseket készít egy tesztadatkészlet több megadott bemeneti soráról.

Értékelje ki a modellt úgy, hogy hozzáadja a következő kódot a EvaluateModel() metódus következő kódsoraként:

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

Miután elkészült az előrejelzési készlettel, az Evaluate() metódus kiértékeli a modellt, amely összehasonlítja az előrejelzett értékeket a tesztadatkészlet tényleges Labels értékével, és metrikákat ad vissza a modell teljesítményéről.

Nyomtassa ki a kiértékelési metrikákat a konzolra úgy, hogy hozzáadja a következő kódot a EvaluateModel() metódus következő kódsoraként:

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

Adja hozzá a következő kódsort a metódus hívása alatt a BuildAndTrainModel() metódus meghívásához EvaluateModel() :

EvaluateModel(mlContext, testDataView, model);

Az eddigi kimenetnek a következő szöveghez hasonlóan kell kinéznie:

=============== 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

Ebben a kimenetben 20 iteráció található. Minden iterációban a hiba mértéke csökken, és közelebb kerül a 0-hoz.

Az root of mean squared error (RMS vagy RMSE) a modell által előrejelzett értékek és a vizsgált adathalmaz megfigyelt értékei közötti különbségek mérésére szolgál. Gyakorlatilag ez a hibák négyzetgyöke. Minél alacsonyabb, annál jobb a modell.

R Squared azt jelzi, hogy az adatok mennyire illenek a modellhez. 0 és 1 közötti tartományok. A 0 érték azt jelenti, hogy az adatok véletlenszerűek, vagy más módon nem felelnek meg a modellnek. Az 1 érték azt jelenti, hogy a modell pontosan megfelel az adatoknak. Azt szeretné, hogy a R Squared pontszám a lehető legközelebb legyen az 1-hez.

A sikeres modellek létrehozása iteratív folyamat. Ez a modell kezdeti minősége alacsonyabb, mivel az oktatóanyag kis adathalmazokat használ a gyors modell betanításához. Ha nem elégedett a modell minőségével, megpróbálhatja javítani azt nagyobb betanítási adatkészletek biztosításával, vagy különböző betanítási algoritmusok kiválasztásával, amelyek mindegyik algoritmushoz különböző hiperparamétereket használnak. További információért tekintse meg az alábbi Modell fejlesztése című szakaszt.

Saját modell használata

Most már használhatja a betanított modellt, hogy előrejelzéseket készítsen az új adatokról.

Hozza létre a metódust UseModelForSinglePrediction() közvetlenül a EvaluateModel() metódus után a következő kóddal:

void UseModelForSinglePrediction(MLContext mlContext, ITransformer model)
{

}

PredictionEngine Az értékelés előrejelzéséhez adja hozzá a következő kódot a következőhözUseModelForSinglePrediction():

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

A PredictionEngine egy kényelmi API, amely lehetővé teszi, hogy egyetlen adatpéldányon végezzen előrejelzést. PredictionEngine nem szálbiztos. Egyszálas vagy prototípusos környezetben is használható. Az éles környezetekben a jobb teljesítmény és a szálbiztonság érdekében használja a PredictionEnginePool szolgáltatást, amely objektumokat hoz létre ObjectPoolPredictionEngine az alkalmazás teljes területén való használatra. Ebből az útmutatóból megtudhatja, hogyan használható PredictionEnginePool ASP.NET Core webes API-ban.

Megjegyzés

PredictionEnginePool A szolgáltatásbővítmény jelenleg előzetes verzióban érhető el.

Hozzon létre egy meghívott példánytMovieRating, és adja át az előrejelzési motornak a metódus következő kódsoraiként UseModelForSinglePrediction() az alábbiak testInput hozzáadásával:

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

var movieRatingPrediction = predictionEngine.Predict(testInput);

A Predict() függvény egyetlen adatoszlopra készít előrejelzést.

Ezután a () vagy az Scoreelőrejelzett minősítéssel megállapíthatja, hogy a movieId 10-et tartalmazó filmet szeretné-e ajánlani a 6. felhasználónak. Minél nagyobb a Score, annál nagyobb annak a valószínűsége, hogy egy felhasználó kedvel egy adott filmet. Ebben az esetben tegyük fel, hogy az előrejelzett 3,5-ös besorolású > filmeket javasolja.

Az eredmények nyomtatásához adja hozzá a következő kódsorokat a UseModelForSinglePrediction() metódushoz:

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);
}

Adja hozzá a következő kódsort a metódus meghívása után a EvaluateModel() metódus meghívásához UseModelForSinglePrediction() :

UseModelForSinglePrediction(mlContext, model);

A metódus kimenetének a következő szöveghez hasonlóan kell kinéznie:

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

A modell mentése

Ahhoz, hogy a modell használatával előrejelzéseket készítsen a végfelhasználói alkalmazásokban, először mentenie kell a modellt.

Hozza létre a metódust SaveModel() közvetlenül a UseModelForSinglePrediction() metódus után a következő kóddal:

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

}

Mentse a betanított modellt úgy, hogy hozzáadja a következő kódot a SaveModel() metódushoz:

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

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

Ez a módszer egy .zip fájlba menti a betanított modellt (az "Adatok" mappába), amelyet aztán más .NET-alkalmazásokban is használhat előrejelzések készítéséhez.

Adja hozzá a következő kódsort a metódus meghívása után a UseModelForSinglePrediction() metódus meghívásához SaveModel() :

SaveModel(mlContext, trainingDataView.Schema, model);

A mentett modell használata

Miután mentette a betanított modellt, különböző környezetekben használhatja a modellt. A betanított gépi tanulási modellek alkalmazásokban való üzembe helyezéséről a Betanított modellek mentése és betöltése című témakörben olvashat.

Results (Eredmények)

A fenti lépések végrehajtása után futtassa a konzolalkalmazást (Ctrl + F5). A fenti egyetlen előrejelzés eredményeinek az alábbihoz hasonlónak kell lenniük. Megjelenhetnek figyelmeztetések vagy üzenetek feldolgozása, de ezeket az üzeneteket eltávolítottuk az alábbi eredményekből az egyértelműség érdekében.

=============== 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 ===============

Gratulálunk! Sikeresen létrehozott egy gépi tanulási modellt a filmek ajánlásához. Az oktatóanyag forráskódját a dotnet/samples adattárban találja.

Modell továbbfejlesztése

Számos módon javíthatja a modell teljesítményét, hogy pontosabb előrejelzéseket kapjon.

Adatok

Ha több betanítási adatot ad hozzá, amely elegendő mintával rendelkezik az egyes felhasználókhoz és mozgókép-azonosítókhoz, javíthatja a javaslati modell minőségét.

A keresztérvényesítés olyan modellek kiértékelésére szolgál, amelyek véletlenszerűen felosztják az adatokat részhalmazokra (ahelyett, hogy tesztadatokat nyernek ki az adathalmazból, mint ebben az oktatóanyagban), és a csoportok némelyikét betanítási adatként, néhány csoportot pedig tesztadatokként használ. Ez a módszer a modellminőség szempontjából felülmúlja a betanítási tesztek felosztását.

Funkciók

Ebben az oktatóanyagban csak az adathalmaz által biztosított három Features (user id, movie idés rating) adatkészletet fogja használni.

Bár ez jó kezdet, a valóságban érdemes lehet más attribútumokat hozzáadni, vagy Features (például életkor, nem, földrajzi hely stb.), ha szerepelnek az adathalmazban. Ha relevánsabb Features elemet ad hozzá, azzal javíthatja a javaslati modell teljesítményét.

Ha nem biztos abban, hogy melyik Features lehet a leginkább releváns a gépi tanulási feladathoz, akkor használhatja a Funkció-hozzájárulás számítása (FCC) és a permutáció funkció fontosságát is, amely ML.NET nyújtja a legbefolyásosabb Featuresfelfedezéséhez.

Algoritmus hiperparaméterei

Bár a ML.NET jó alapértelmezett betanítási algoritmusokat biztosít, az algoritmus hiperparamétereinek módosításával tovább finomhangolhatja a teljesítményt.

A esetében Matrix Factorizationkísérletezhet olyan hiperparaméterekkel, mint a NumberOfIterations és a ApproximationRank , hogy lássa, ez jobb eredményeket ad-e.

Ebben az oktatóanyagban például az algoritmus beállításai a következők:

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

Egyéb javaslati algoritmusok

A mátrix-faktorizációs algoritmus együttműködési szűréssel csak egy megközelítés a filmjavaslatok végrehajtásához. Sok esetben előfordulhat, hogy nem rendelkezik a minősítési adatokkal, és csak a filmelőzmények érhetők el a felhasználók számára. Más esetekben előfordulhat, hogy nem csak a felhasználó minősítési adataival rendelkezik.

Algoritmus Eset Sample
Egyosztályos mátrix faktorizálása Ezt akkor használja, ha csak userId és movieId azonosítóval rendelkezik. Ez a javaslati stílus az együttes vásárlás forgatókönyvén vagy a gyakran együtt vásárolt termékeken alapul, ami azt jelenti, hogy a saját vásárlási előzményeik alapján egy termékkészletet javasol az ügyfeleknek. >Próbálja ki
Mezőérzékeny faktorizációs gépek Ezzel a funkcióval javaslatokat tehet, ha a userId azonosítón, a termékazonosítón és az értékelésen (például a termék leírásán vagy a termék árán) túl több szolgáltatással rendelkezik. Ez a módszer egy együttműködési szűrési módszert is használ. >Próbálja ki

Új felhasználói forgatókönyv

Az együttműködésen alapuló szűrés egyik gyakori problémája a hidegindítási probléma, amely akkor fordul elő, ha olyan új felhasználóval rendelkezik, aki nem rendelkezik korábbi adatokkal, hogy következtetéseket vonjon le. Ezt a problémát gyakran azzal oldják meg, hogy megkérik az új felhasználókat, hogy hozzanak létre egy profilt, és értékeljenek például a korábban látott filmeket. Bár ez a módszer némi terhet ró a felhasználóra, néhány kezdőadatot biztosít azoknak az új felhasználóknak, akik nem rendelkeznek minősítési előzményekkel.

További források

Az oktatóanyagban használt adatok a MovieLens-adatkészletből származnak.

További lépések

Ez az oktatóanyag bemutatta, hogyan végezheti el az alábbi műveleteket:

  • Gépi tanulási algoritmus kiválasztása
  • Az adatok előkészítése és betöltése
  • Modell létrehozása és betanítása
  • Modell kiértékelése
  • Modell üzembe helyezése és felhasználása

További információért lépjen tovább a következő oktatóanyagra