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]