Azure HDInsight'ta Apache Mahout kullanarak öneriler oluşturma
Film önerileri oluşturmak için Azure HDInsight ile Apache Mahout makine öğrenmesi kitaplığını kullanmayı öğrenin.
Mahout, Apache Hadoop için bir makine öğrenmesi kitaplığıdır. Mahout filtreleme, sınıflandırma ve kümeleme gibi verileri işlemek için algoritmalar içerir. Bu makalede, arkadaşlarınızın gördüğü filmleri temel alan film önerileri oluşturmak için bir öneri altyapısı kullanırsınız.
Önkoşullar
HDInsight üzerinde bir Apache Hadoop kümesi. Bkz . Linux'ta HDInsight'ı kullanmaya başlama.
Önerileri anlama
Mahout tarafından sağlanan işlevlerden biri bir öneri altyapısıdır. Bu altyapı, , itemId
ve prefValue
(öğenin tercihi) biçimindeki userID
verileri kabul eder. Mahout daha sonra bir öğe için tercihi olan kullanıcıların da bu diğer öğeler için tercihi olduğunu belirlemek için birlikte oluşum analizi gerçekleştirebilir. Daha sonra Mahout, öneride bulunmak için kullanılabilecek like-item tercihlerine sahip kullanıcıları belirler.
Aşağıdaki iş akışı, film verilerini kullanan basitleştirilmiş bir örnektir:
Birlikte oluşum: Joe, Alice ve Bob'un hepsi Star Wars, The Empire Strikes Back ve Return of the
Jedi
'i beğendiler. Mahout, bu filmlerden herhangi birini beğenen kullanıcıların da diğer ikisi gibi olduğunu belirler.Birlikte oluşum: Bob ve Alice ayrıca The Phantom Menace, Attack of the Clones ve Revenge of the Sith'i de beğendiler. Mahout, önceki üç filmi beğenen kullanıcıların da bu üç filmi beğendiğini belirler.
Benzerlik önerisi: Joe ilk üç filmi beğendiğinden, Mahout benzer tercihlere sahip olan diğer kişilerin beğendiği ama Joe'nun izlemediği (beğenilen/derecelendirilen) filmlere bakar. Bu durumda Mahout, Hayalet Tehdit, Klonların Saldırısı ve Sith'in İntikamı'nı önerir.
Verileri anlama
GroupLens Research, filmler için Mahout ile uyumlu bir biçimde derecelendirme verileri sağlar. Bu veriler, kümenizin konumundaki varsayılan depolamada /HdiSamples/HdiSamples/MahoutMovieData
kullanılabilir.
İki dosya moviedb.txt
vardır ve user-ratings.txt
. Dosya user-ratings.txt
analiz sırasında kullanılır. moviedb.txt
, sonuçları görüntülerken kullanıcı dostu metin bilgileri sağlamak için kullanılır.
içinde user-ratings.txt
yer alan veriler, her kullanıcının bir filmi ne kadar yüksek derecelendirdiğini gösteren , movieID
userRating
, ve timestamp
şeklinde bir yapıya userID
sahiptir. Veri örneği aşağıda verilmiştir:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
Analizi çalıştırma
Kümenize bağlanmak için ssh komutunu kullanın. CLUSTERNAME değerini kümenizin adıyla değiştirip komutunu girerek aşağıdaki komutu düzenleyin:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Öneri işini çalıştırmak için aşağıdaki komutu kullanın:
mahout recommenditembased -s SIMILARITY_COOCCURRENCE -i /HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt -o /example/data/mahoutout --tempDir /temp/mahouttemp
Dekont
İşin tamamlanması birkaç dakika sürebilir ve birden çok MapReduce işi çalıştırabilir.
Çıkışı görüntüleme
İş tamamlandıktan sonra, oluşturulan çıkışı görüntülemek için aşağıdaki komutu kullanın:
hdfs dfs -text /example/data/mahoutout/part-r-00000
Çıkış aşağıdaki gibi görünür:
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]
İlk sütun şeklindedir
userID
. '[' ve ']' içinde yer alan değerler:movieId
recommendationScore
Öneriler hakkında daha fazla bilgi sağlamak için çıktıyı moviedb.txt dosyasıyla birlikte kullanabilirsiniz. İlk olarak, aşağıdaki komutları kullanarak dosyaları yerel olarak kopyalayın:
hdfs dfs -get /example/data/mahoutout/part-r-00000 recommendations.txt hdfs dfs -get /HdiSamples/HdiSamples/MahoutMovieData/* .
Bu komut, çıkış verilerini film veri dosyalarıyla birlikte geçerli dizindeki recommendations.txt adlı bir dosyaya kopyalar.
Öneriler çıktısındaki veriler için film adlarının aranacağı bir Python betiği oluşturmak için aşağıdaki komutu kullanın:
nano show_recommendations.py
Düzenleyici açıldığında, dosyanın içeriği olarak aşağıdaki metni kullanın:
#!/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 "------------------------"
Verileri kaydetmek için Ctrl-X, Y ve son olarak Enter tuşlarına basın.
Python betiğini çalıştırın. Aşağıdaki komut, tüm dosyaların indirildiği dizinde olduğunuzu varsayar:
python show_recommendations.py 4 user-ratings.txt moviedb.txt recommendations.txt
Bu komut, 4. kullanıcı kimliği için oluşturulan önerilere bakar.
user-ratings.txt dosyası derecelendirilmiş filmleri almak için kullanılır.
Moviedb.txt dosyası, filmlerin adlarını almak için kullanılır.
recommendations.txt, bu kullanıcının film önerilerini almak için kullanılır.
Bu komutun çıktısı aşağıdaki metne benzer:
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
Geçici verileri silme
Mahout işleri, iş işlenirken oluşturulan geçici verileri kaldırmaz. parametresi --tempDir
, kolay silme için geçici dosyaları belirli bir yola yalıtmak için örnek işte belirtilir. Geçici dosyaları kaldırmak için aşağıdaki komutu kullanın:
hdfs dfs -rm -f -r /temp/mahouttemp
Uyarı
Komutu yeniden çalıştırmak istiyorsanız çıkış dizinini de silmeniz gerekir. Bu dizini silmek için aşağıdakileri kullanın:
hdfs dfs -rm -f -r /example/data/mahoutout
Sonraki adımlar
Mahout'u kullanmayı öğrendiğinize göre HDInsight'ta verilerle çalışmanın diğer yollarını keşfedin: