Javaslatok létrehozása az Apache Mahout használatával az Azure HDInsightban
Megtudhatja, hogyan hozhat létre filmjavaslatokat az Apache Mahout gépi tanulási kódtárral az Azure HDInsighttal.
A Mahout az Apache Hadoop gépi tanulási kódtára. A Mahout algoritmusokat tartalmaz az adatok feldolgozásához, például a szűréshez, a besoroláshoz és a fürtözéshez. Ebben a cikkben egy ajánlómotort használ a barátai által látott filmek alapján létrehozott filmekre vonatkozó javaslatok létrehozásához.
Előfeltételek
Apache Hadoop-fürt a HDInsighton. Tekintse meg a HDInsight linuxos használatának első lépéseit.
Javaslatok ismertetése
A Mahout által biztosított funkciók egyike egy javaslatmotor. Ez a motor a következő formátumban userID
fogadja el az adatokat: , itemId
és prefValue
(az elem beállításai). A Mahout ezután elvégezheti az együttes előfordulási elemzést annak megállapításához, hogy az elemeket előnyben részesítő felhasználók is előnyben részesítik ezeket a többi elemet. A Mahout ezután meghatározza a hasonló elemekkel rendelkező felhasználókat, amelyek javaslatokat tehetnek.
Az alábbi munkafolyamat egy egyszerűsített példa, amely mozgóképadatokat használ:
Társ-előfordulás: Joe, Alice, és Bob minden tetszett Star Wars, The Empire Strikes Back, és Return of the
Jedi
. Mahout határozza meg, hogy a felhasználók, akik kedvelik bármelyik ilyen filmek is, mint a másik kettő.Társ-előfordulás: Bob és Alice is tetszett a Fantom fenyegetés, támadás a klónok, és bosszúja a Sith. Mahout megállapítja, hogy az előző három filmet kedvelő felhasználók is kedvelik ezt a három filmet.
Hasonlósági javaslat: Mivel Joe tetszett az első három film, Mahout néz filmek, hogy mások hasonló preferenciák tetszett, de Joe nem nézett (kedvelt / értékelt). Ebben az esetben Mahout a Fantom fenyegetést, a Klónok támadását és a Sith bosszúját javasolja.
Az adatok ismertetése
A GroupLens Research kényelmesen a Mahouttal kompatibilis formátumban biztosít minősítési adatokat a filmekhez. Ezek az adatok a fürt alapértelmezett tárolójában érhetők el a következő helyen /HdiSamples/HdiSamples/MahoutMovieData
: .
Két fájl van, moviedb.txt
és user-ratings.txt
. A user-ratings.txt
fájl az elemzés során használatos. Ez moviedb.txt
felhasználóbarát szöveges információkat biztosít az eredmények megtekintésekor.
A benne user-ratings.txt
található adatok struktúrája userID
, movieID
, userRating
és timestamp
, amely azt jelzi, hogy az egyes felhasználók milyen magasra értékelték a filmet. Íme egy példa az adatokra:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
Az elemzés futtatása
Az ssh paranccsal csatlakozzon a fürthöz. Szerkessze a következő parancsot úgy, hogy lecseréli a CLUSTERNAME nevet a fürt nevére, majd írja be a parancsot:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
A javaslati feladat futtatásához használja a következő parancsot:
mahout recommenditembased -s SIMILARITY_COOCCURRENCE -i /HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt -o /example/data/mahoutout --tempDir /temp/mahouttemp
Megjegyzés:
A feladat végrehajtása több percet is igénybe vehet, és több MapReduce-feladatot is futtathat.
A kimenet megtekintése
A feladat befejezése után a következő paranccsal tekintheti meg a létrehozott kimenetet:
hdfs dfs -text /example/data/mahoutout/part-r-00000
A kimenet a következőképpen jelenik meg:
1 [234:5.0,347:5.0,237:5.0,47:5.0,282:5.0,275:5.0,88:5.0,515:5.0,514:5.0,121:5.0] 2 [282:5.0,210:5.0,237:5.0,234:5.0,347:5.0,121:5.0,258:5.0,515:5.0,462:5.0,79:5.0] 3 [284:5.0,285:4.828125,508:4.7543354,845:4.75,319:4.705128,124:4.7045455,150:4.6938777,311:4.6769233,248:4.65625,272:4.649266] 4 [690:5.0,12:5.0,234:5.0,275:5.0,121:5.0,255:5.0,237:5.0,895:5.0,282:5.0,117:5.0]
Az első oszlop a
userID
. A "[' és a "" értékek a következőkmovieId
:recommendationScore
A kimenetet a moviedb.txt fájllal együtt használhatja, hogy további információt nyújtson a javaslatokról. Először másolja a fájlokat helyileg a következő parancsokkal:
hdfs dfs -get /example/data/mahoutout/part-r-00000 recommendations.txt hdfs dfs -get /HdiSamples/HdiSamples/MahoutMovieData/* .
Ez a parancs átmásolja a kimeneti adatokat egy recommendations.txt nevű fájlba az aktuális könyvtárban, a mozgókép adatfájljaival együtt.
Az alábbi paranccsal hozzon létre egy Python-szkriptet, amely megkeresi a javaslatok kimenetében szereplő adatok filmneveit:
nano show_recommendations.py
Amikor megnyílik a szerkesztő, használja a következő szöveget a fájl tartalmaként:
#!/usr/bin/env python import sys if len(sys.argv) != 5: print "Arguments: userId userDataFilename movieFilename recommendationFilename" sys.exit(1) userId, userDataFilename, movieFilename, recommendationFilename = sys.argv[1:] print "Reading Movies Descriptions" movieFile = open(movieFilename) movieById = {} for line in movieFile: tokens = line.split("|") movieById[tokens[0]] = tokens[1:] movieFile.close() print "Reading Rated Movies" userDataFile = open(userDataFilename) ratedMovieIds = [] for line in userDataFile: tokens = line.split("\t") if tokens[0] == userId: ratedMovieIds.append((tokens[1],tokens[2])) userDataFile.close() print "Reading Recommendations" recommendationFile = open(recommendationFilename) recommendations = [] for line in recommendationFile: tokens = line.split("\t") if tokens[0] == userId: movieIdAndScores = tokens[1].strip("[]\n").split(",") recommendations = [ movieIdAndScore.split(":") for movieIdAndScore in movieIdAndScores ] break recommendationFile.close() print "Rated Movies" print "------------------------" for movieId, rating in ratedMovieIds: print "%s, rating=%s" % (movieById[movieId][0], rating) print "------------------------" print "Recommended Movies" print "------------------------" for movieId, score in recommendations: print "%s, score=%s" % (movieById[movieId][0], score) print "------------------------"
Az adatok mentéséhez nyomja le a Ctrl-X, Y, végül az Enter billentyűkombinációt .
Futtassa a Python-szkriptet. A következő parancs feltételezi, hogy abban a könyvtárban van, ahol az összes fájl le lett töltve:
python show_recommendations.py 4 user-ratings.txt moviedb.txt recommendations.txt
Ez a parancs a 4. felhasználói azonosítóhoz létrehozott javaslatokat vizsgálja.
A user-ratings.txt fájl a minősített filmek lekérésére szolgál.
A moviedb.txt fájl a filmek nevének lekérésére szolgál.
A recommendations.txt fájl a felhasználó filmjavaslatainak lekérésére szolgál.
A parancs kimenete a következőhöz hasonló:
Seven Years in Tibet (1997), score=5.0 Indiana Jones and the Last Crusade (1989), score=5.0 Jaws (1975), score=5.0 Sense and Sensibility (1995), score=5.0 Independence Day (ID4) (1996), score=5.0 My Best Friend's Wedding (1997), score=5.0 Jerry Maguire (1996), score=5.0 Scream 2 (1997), score=5.0 Time to Kill, A (1996), score=5.0
Ideiglenes adatok törlése
A Mahout-feladatok nem távolítják el a feladat feldolgozása során létrehozott ideiglenes adatokat. A --tempDir
paraméter a példafeladatban van megadva, amely elkülöníti az ideiglenes fájlokat egy adott elérési útba a könnyű törlés érdekében. Az ideiglenes fájlok eltávolításához használja a következő parancsot:
hdfs dfs -rm -f -r /temp/mahouttemp
Figyelmeztetés
Ha ismét futtatni szeretné a parancsot, a kimeneti könyvtárat is törölnie kell. A könyvtár törléséhez használja az alábbiakat:
hdfs dfs -rm -f -r /example/data/mahoutout
További lépések
Most, hogy megtanulta, hogyan használhatja a Mahoutot, fedezze fel az adatok HDInsighton való használatának egyéb módjait:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: