Megosztás a következőn keresztül:


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

  1. 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
    
  2. 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

  1. 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

  2. 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.

  3. 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 .

  4. 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: