Mahout - Öneri

Bu bölüm, recommendation, mekanizmaları ve Mahout tavsiyesini uygulayan bir uygulamanın nasıl yazılacağı.

Öneri

Amazon'un ilginizi çekebilecek belirli bir ürüne dikkatinizi çekmek için önerilen öğeler listesini nasıl oluşturduğunu hiç merak ettiniz!

Amazon'dan "Mahout İş Başında" kitabını satın almak istediğinizi varsayalım:

Amazon, seçilen ürünle birlikte aşağıda gösterildiği gibi ilgili önerilen öğelerin bir listesini de görüntüler.

Bu tür öneri listeleri, recommender engines. Mahout, aşağıdakiler gibi çeşitli türde tavsiye motorları sağlar:

  • kullanıcı tabanlı tavsiye verenler,
  • öğe temelli tavsiyeciler ve
  • diğer birkaç algoritma.

Mahout Öneri Motoru

Mahout, dağıtılmamış, Hadoop tabanlı olmayan bir tavsiye motoruna sahiptir. Öğeler için kullanıcı tercihlerine sahip bir metin belgesi iletmelisiniz. Ve bu motorun çıktısı, belirli bir kullanıcının diğer öğeler için tahmini tercihleri ​​olacaktır.

Misal

Cep telefonları, araçlar ve aksesuarları gibi tüketim malları satan bir web sitesi düşünün. Mahout'un özelliklerini böyle bir siteye uygulamak istersek, o zaman bir tavsiye motoru oluşturabiliriz. Bu motor, kullanıcıların geçmiş satın alma verilerini analiz eder ve buna göre yeni ürünler önerir.

Mahout tarafından bir öneri motoru oluşturmak için sağlanan bileşenler aşağıdaki gibidir:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Veri deposundan veri modeli hazırlanır ve öneri motoruna girdi olarak aktarılır. Öneri motoru, belirli bir kullanıcı için öneriler üretir. Aşağıda verilen tavsiye motorunun mimarisidir.

Öneri Motorunun Mimarisi

Mahout kullanarak Öneri Aracı Oluşturma

İşte basit bir öneri geliştirmenin adımları:

Adım 1: DataModel Nesnesi Oluşturun

Yapıcısı PearsonCorrelationSimilaritysınıfı, bir ürünün Kullanıcılar, Öğeler ve Tercihler ayrıntılarını içeren bir dosyayı tutan bir veri modeli nesnesi gerektirir. Örnek veri modeli dosyası şu şekildedir:

1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0

2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0

3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0

4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0

DataModelnesne, girdi dosyasının yolunu içeren dosya nesnesini gerektirir. OluşturDataModel aşağıda gösterildiği gibi nesne.

DataModel datamodel = new FileDataModel(new File("input file"));

Adım 2: UserSimilarity Nesnesi Oluşturun

Oluşturmak UserSimilarity kullanan nesne PearsonCorrelationSimilarity aşağıda gösterildiği gibi sınıf:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

3. Adım: UserNeighbourhood nesnesi oluşturun

Bu nesne, belirli bir kullanıcı gibi kullanıcıların bir "mahallesini" hesaplar. İki tür mahalle vardır:

  • NearestNUserNeighborhood- Bu sınıf , belirli bir kullanıcıya en yakın n kullanıcıdan oluşan bir mahalleyi hesaplar . "En yakın", verilen Kullanıcı Benzerliği ile tanımlanır.

  • ThresholdUserNeighborhood- Bu sınıf, belirli bir kullanıcıya benzerliği belirli bir eşiği karşılayan veya aşan tüm kullanıcılardan oluşan bir mahalleyi hesaplar. Benzerlik, verilen UserSimilarity tarafından tanımlanır.

Burada kullanıyoruz ThresholdUserNeighborhood ve tercih sınırını 3.0 olarak ayarlayın.

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

4. Adım: Öneri Nesnesi Oluşturun

Oluşturmak UserbasedRecomendernesne. Yukarıda oluşturulan tüm nesneleri aşağıda gösterildiği gibi yapıcısına iletin.

UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

5. Adım: Öğeleri Kullanıcıya Önerin

Tavsiye () yöntemini kullanarak bir kullanıcıya ürün önerin Recommenderarayüz. Bu yöntem iki parametre gerektirir. İlki, önerileri göndermemiz gereken kullanıcının kullanıcı kimliğini, ikincisi ise gönderilecek önerilerin sayısını temsil eder. İşte kullanımırecommender() yöntem:

List<RecommendedItem> recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

Example Program

Aşağıda, öneri ayarlamak için örnek bir program verilmiştir. Kullanıcı kimliği 2 olan kullanıcı için önerileri hazırlayın.

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;

import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;

import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;

import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class Recommender {
   public static void main(String args[]){
      try{
         //Creating data model
         DataModel datamodel = new FileDataModel(new File("data")); //data
      
         //Creating UserSimilarity object.
         UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
      
         //Creating UserNeighbourHHood object.
         UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
      
         //Create UserRecomender
         UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
        
         List<RecommendedItem> recommendations = recommender.recommend(2, 3);
			
         for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
         }
      
      }catch(Exception e){}
      
   }
  }

Programı aşağıdaki komutları kullanarak derleyin:

javac Recommender.java
java Recommender

Aşağıdaki çıktıyı üretmelidir:

RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]