본문 바로가기

데이터 분석

mahout - 설치 및 User 기준 추천

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Mahout




※ 처음에는 대충 느낌 상 Maven Dependency만 추가하면 사용 가능하다고 생각하고 삽질을 함.


하지만 자세히 보니 설치 필요






그래서 최신 버젼인 0.13.0을 대충 아무데나 받아서 압축품


 






그리고 환경변수 추가


  #vi /etc/profile

 





Maven은 설치 되어 있어야 하며 이클립스 플러그인은 Default로 있으니 이클립스 최신버젼 다운



Maven 프로젝트 생성 후



Pom.xml에 추가

      

        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-math</artifactId>
            <version>0.13.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-hdfs</artifactId>
            <version>0.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-mr</artifactId>
            <version>0.10.0</version>
        </dependency>






사용할 샘플 데이터

 

유저아이디, 상품번호, 선호도

1,10,1.0
1,11,2.0
1,12,5.0
1,13,5.0
1,14,5.0
1,15,4.0
1,16,5.0
1,17,1.0
1,18,5.0
2,10,1.0
2,11,2.0
2,15,5.0
2,16,4.5
2,17,1.0
2,18,5.0
3,11,2.5
3,12,4.5
3,13,4.0
3,14,3.0
3,15,3.5
3,16,4.5
3,17,4.0
3,18,5.0
4,10,5.0
4,11,5.0
4,12,5.0
4,13,0.0
4,14,2.0
4,15,3.0
4,16,1.0
4,17,4.0
4,18,1.0






테스트


import java.io.*;
import java.util.*;
import org.apache.mahout.cf.taste.common.TasteException;
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 App
{
    public static void main( String[] args ) throws IOException, TasteException
    {

        //파일을 읽고

        DataModel model = new FileDataModel(new File("/home/ksu/Downloads/workspace/mahout/data/dataset.csv"));


        //유저 기준 유사성
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);


         //0.1보다 큰 유사성을 가진 모든 것을 사용. 그리고 ThresholdUserNeighborhood를 통해 구현

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


        //유저 기준 추천 모델

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



        //2번 유저에게 1개 아이템 추천  => (2, 1)

        List<RecommendedItem> recommendations = recommender.recommend(2, 1);
        for (RecommendedItem recommendation : recommendations) {
          System.out.println(recommendation);
        }
    }
}

 





결과 (Console Result)

     ● User based recommendations



입력 데이터를 보면 2번 유저는 12번 상품과 상관이 없다.

하지만 비슷한 물건을 산 유저들의 구입 상품들 중에서 하나 추천받음



RecommendedItem[item:12, value:4.8328104]

 







끝~~






'데이터 분석' 카테고리의 다른 글

MSE, RMSE  (0) 2017.05.19
Spark - Naive Bayes (단어를 이용한 문서 구별)  (0) 2017.05.12
Spark - Collaborative Filtering (영화 추천)  (0) 2017.05.10
Spark - Gaussian Mixture Model Example  (0) 2017.05.01
Spark - K-means  (0) 2017.05.01