Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara menggunakan pustaka pembelajaran mesin Apache Mahout dengan Azure HDInsight untuk menghasilkan rekomendasi film.
Mahout adalah pustaka pembelajaran mesin untuk Apache Hadoop. Mahout berisi algoritma untuk memproses data, seperti pemfilteran, klasifikasi, dan pengklusteran. Dalam artikel ini, Anda menggunakan mesin rekomendasi untuk menghasilkan rekomendasi film yang didasarkan pada film yang telah dilihat teman Anda.
Prasyarat
Kluster Apache Hadoop di Microsoft Azure HDInsight. Lihat Mulai menggunakan Microsoft Azure HDInsight di Linux.
Memahami rekomendasi
Salah satu fungsi yang disediakan oleh Mahout adalah mesin rekomendasi. Mesin ini menerima data dalam format userID
, itemId
, dan prefValue
(preferensi untuk item). Mahout kemudian dapat melakukan analisis kemunculan bersama untuk menentukan: pengguna yang memiliki preferensi untuk item juga memiliki preferensi untuk item lain ini. Mahout kemudian menentukan pengguna dengan preferensi item serupa, yang dapat digunakan untuk membuat rekomendasi.
Alur kerja berikut adalah contoh yang disederhanakan yang menggunakan data film:
Kemunculan bersama: Joe, Alice, dan Bob semuanya menyukai Star Wars, The Empire Strikes Back, dan Return of the
Jedi
. Mahout menentukan bahwa pengguna yang menyukai salah satu film ini juga menyukai dua film lainnya.Kemunculan bersama: Bob dan Alice juga menyukai The Phantom Menace, Attack of the Clones, dan Revenge of the Sith. Mahout menentukan bahwa pengguna yang menyukai tiga film sebelumnya juga menyukai ketiga film ini.
Rekomendasi kesamaan: Karena Joe menyukai tiga film pertama, Mahout melihat film yang disukai orang lain dengan preferensi serupa, tetapi Joe belum menonton (disukai/diberi peringkat). Dalam hal ini, Mahout merekomendasikan The Phantom Menace, Attack of the Clones, dan Revenge of the Sith.
Memahami data
Dengan nyaman, GroupLens Research menyediakan data peringkat untuk film dalam format yang kompatibel dengan Mahout. Data ini tersedia di penyimpanan default kluster Anda di /HdiSamples/HdiSamples/MahoutMovieData
.
Ada dua file, moviedb.txt
dan user-ratings.txt
. File user-ratings.txt
digunakan selama analisis.
moviedb.txt
digunakan untuk memberikan informasi teks yang mudah digunakan saat melihat hasilnya.
Data yang terkandung dalam user-ratings.txt
memiliki struktur userID
, , userRating
movieID
, dan timestamp
, yang menunjukkan seberapa tinggi setiap pengguna menilai film. Berikut adalah contoh data:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
Menjalankan analisis
Gunakan perintah ssh untuk menyambungkan ke kluster Anda. Edit perintah berikut dengan mengganti CLUSTERNAME dengan nama kluster Anda, lalu masukkan perintah:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Gunakan perintah berikut untuk menjalankan pekerjaan rekomendasi:
mahout recommenditembased -s SIMILARITY_COOCCURRENCE -i /HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt -o /example/data/mahoutout --tempDir /temp/mahouttemp
Nota
Pekerjaan mungkin memerlukan waktu beberapa menit untuk diselesaikan, dan dapat menjalankan beberapa pekerjaan MapReduce.
Lihat output
Setelah pekerjaan selesai, gunakan perintah berikut untuk melihat output yang dihasilkan:
hdfs dfs -text /example/data/mahoutout/part-r-00000
Output muncul sebagai berikut:
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]
Kolom pertama adalah
userID
. Nilai yang terkandung dalam '[' dan ']' adalahmovieId
:recommendationScore
.Anda dapat menggunakan output, bersama dengan moviedb.txt, untuk memberikan informasi lebih lanjut tentang rekomendasi. Pertama, salin file secara lokal menggunakan perintah berikut:
hdfs dfs -get /example/data/mahoutout/part-r-00000 recommendations.txt hdfs dfs -get /HdiSamples/HdiSamples/MahoutMovieData/* .
Perintah ini menyalin data output ke file bernama recommendations.txt di direktori saat ini, bersama dengan file data film.
Gunakan perintah berikut untuk membuat skrip Python yang mencari nama film untuk data dalam output rekomendasi:
nano show_recommendations.py
Saat editor terbuka, gunakan teks berikut sebagai konten file:
#!/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 "------------------------"
Tekan Ctrl-X, Y, dan akhirnya Enter untuk menyimpan data.
Jalankan skrip Python. Perintah berikut mengasumsikan Anda berada di direktori tempat semua file diunduh:
python show_recommendations.py 4 user-ratings.txt moviedb.txt recommendations.txt
Perintah ini melihat rekomendasi yang dihasilkan untuk ID pengguna 4.
File user-ratings.txt digunakan untuk mengambil film yang telah diberi peringkat.
File moviedb.txt digunakan untuk mengambil nama film.
recommendations.txt digunakan untuk mengambil rekomendasi film untuk pengguna ini.
Output dari perintah ini mirip dengan teks berikut:
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
Menghapus data sementara
Pekerjaan Mahout tidak menghapus data sementara yang dibuat saat memproses pekerjaan. Parameter --tempDir
ditentukan dalam contoh pekerjaan untuk mengisolasi file sementara ke jalur tertentu untuk penghapusan yang mudah. Untuk menghapus file sementara, gunakan perintah berikut:
hdfs dfs -rm -f -r /temp/mahouttemp
Peringatan
Jika Anda ingin menjalankan perintah lagi, Anda juga harus menghapus direktori output. Gunakan berikut ini untuk menghapus direktori ini:
hdfs dfs -rm -f -r /example/data/mahoutout
Langkah berikutnya
Sekarang setelah Anda mempelajari cara menggunakan Mahout, temukan cara lain untuk bekerja dengan data di HDInsight: