Mahout-추천

이 장에서는 널리 사용되는 머신 러닝 기술을 다룹니다. recommendation, 그 메커니즘과 Mahout 권장 사항을 구현하는 응용 프로그램을 작성하는 방법.

추천

Amazon이 관심을 가질만한 특정 제품에 관심을 끌기 위해 추천 항목 목록을 어떻게 제공하는지 궁금한 적이 있습니다!

Amazon에서 "Mahout in Action"책을 구입한다고 가정 해보십시오.

아마존은 선택한 상품과 함께 아래와 같이 관련 추천 아이템 목록도 표시합니다.

이러한 추천 목록은 다음을 통해 생성됩니다. recommender engines. Mahout은 다음과 같은 여러 유형의 추천 엔진을 제공합니다.

  • 사용자 기반 추천자,
  • 항목 기반 추천자 및
  • 몇 가지 다른 알고리즘.

Mahout 추천 엔진

Mahout에는 비 분산, 비 Haadoop 기반 추천 엔진이 있습니다. 항목에 대한 사용자 기본 설정이있는 텍스트 문서를 전달해야합니다. 그리고이 엔진의 출력은 다른 항목에 대한 특정 사용자의 예상 선호도가 될 것입니다.

모바일, 가제트 및 액세서리와 같은 소비재를 판매하는 웹 사이트를 생각해보십시오. 이러한 사이트에서 Mahout의 기능을 구현하려면 추천 엔진을 구축 할 수 있습니다. 이 엔진은 사용자의 과거 구매 데이터를 분석하고이를 기반으로 신제품을 추천합니다.

추천자 엔진을 구축하기 위해 Mahout에서 제공하는 구성 요소는 다음과 같습니다.

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

데이터 저장소에서 데이터 모델이 준비되고 추천자 엔진에 입력으로 전달됩니다. Recommender 엔진은 특정 사용자에 대한 권장 사항을 생성합니다. 다음은 추천 엔진의 아키텍처입니다.

Recommender Engine의 아키텍처

Mahout을 사용하여 추천자 구축

간단한 추천자를 개발하는 단계는 다음과 같습니다.

1 단계 : 데이터 모델 개체 생성

생성자 PearsonCorrelationSimilarity클래스에는 제품의 사용자, 항목 및 환경 설정 세부 사항을 포함하는 파일을 보유하는 데이터 모델 오브젝트가 필요합니다. 다음은 샘플 데이터 모델 파일입니다.

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

그만큼 DataModelobject에는 입력 파일의 경로를 포함하는 파일 개체가 필요합니다. 만들기DataModel 아래와 같이 개체.

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

2 단계 : UserSimilarity 개체 만들기

창조하다 UserSimilarity 사용하는 개체 PearsonCorrelationSimilarity 아래와 같이 클래스 :

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

3 단계 : UserNeighborhood 개체 만들기

이 개체는 주어진 사용자와 같은 사용자의 "이웃"을 계산합니다. 이웃에는 두 가지 유형이 있습니다.

  • NearestNUserNeighborhood-이 클래스 는 주어진 사용자 와 가장 가까운 n 명의 사용자 로 구성된 이웃을 계산합니다 . "Nearest"는 주어진 UserSimilarity로 정의됩니다.

  • ThresholdUserNeighborhood-이 클래스는 주어진 사용자와의 유사성이 특정 임계 값을 충족하거나 초과하는 모든 사용자로 구성된 이웃을 계산합니다. 유사성은 주어진 UserSimilarity에 의해 정의됩니다.

여기서 우리는 ThresholdUserNeighborhood 기본 설정 제한을 3.0으로 설정합니다.

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

4 단계 : 추천자 개체 만들기

창조하다 UserbasedRecomender목적. 위에서 만든 모든 객체를 아래와 같이 생성자에 전달합니다.

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

5 단계 : 사용자에게 항목 추천

권장 () 메소드를 사용하여 사용자에게 제품을 추천합니다. Recommender상호 작용. 이 방법에는 두 개의 매개 변수가 필요합니다. 첫 번째는 추천을 보내야하는 사용자의 사용자 ID를 나타내고 두 번째는 보낼 추천의 수를 나타냅니다. 다음은 사용법입니다.recommender() 방법:

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

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

Example Program

다음은 추천을 설정하는 예제 프로그램입니다. 사용자 ID가 2 인 사용자를위한 권장 사항을 준비하십시오.

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){}
      
   }
  }

다음 명령을 사용하여 프로그램을 컴파일하십시오.

javac Recommender.java
java Recommender

다음 출력을 생성해야합니다.

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