Step1:
Create a new Maven project in the Mahout main directory, in my environment is ~/Mahout/trunk
This command creates a new "project" directory. And add a new package "com.smims.recommenderintro" in its.
And create a new java file "App.java".
smims@ubuntu:~/mahout/trunk$mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.smims.recommenderintro -DartifactId=project
smims@ubuntu:~/mahout/trunk$mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.smims.recommenderintro -DartifactId=project [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:RELEASE [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.smims.recommenderintro [INFO] Parameter: packageName, Value: com.smims.recommenderintro [INFO] Parameter: package, Value: com.smims.recommenderintro [INFO] Parameter: artifactId, Value: project [INFO] Parameter: basedir, Value: /home/smims/mahout/trunk [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /home/smims/mahout/trunk/project [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Mahout Build Tools ................................ SKIPPED [INFO] Apache Mahout ..................................... SUCCESS [22.584s] [INFO] Mahout Math ....................................... SKIPPED [INFO] Mahout Core ....................................... SKIPPED [INFO] Mahout Integration ................................ SKIPPED [INFO] Mahout Examples ................................... SKIPPED [INFO] Mahout Release Package ............................ SKIPPED [INFO] Mahout Math/Scala wrappers ........................ SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 33.614s [INFO] Finished at: Wed Nov 27 11:00:53 CST 2013 [INFO] Final Memory: 18M/44M [INFO] ------------------------------------------------------------------------
Step2:
Change to the project directory. Test the new project, it should print the "Hello world!" message.
smims@ubuntu:~/mahout/trunk/project$mvn compile smims@ubuntu:~/mahout/trunk/project$mvn exec:java -Dexec.mainClass="com.smims.recommenderintro.App"
smims@ubuntu:~/mahout/trunk/project$mvn compile [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/smims/mahout/trunk/project/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /home/smims/mahout/trunk/project/target/classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.181s [INFO] Finished at: Wed Nov 27 11:09:03 CST 2013 [INFO] Final Memory: 9M/22M [INFO] ------------------------------------------------------------------------ smims@ubuntu:~/mahout/trunk/project$mvn exec:java -Dexec.mainClass="com.smims.recommenderintro.App" [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ project >>> [INFO] [INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ project <<< [INFO] [INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ project --- Hello World! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.945s [INFO] Finished at: Wed Nov 27 11:13:45 CST 2013 [INFO] Final Memory: 11M/26M [INFO] ------------------------------------------------------------------------
Step3:
Create a text file "intro.csv" in the project directory, same as the pom.xml.
For example:User 1 has preference value 3.0 for item 102.
1,101,5.0 1,102,3.0 1,103,2.5 2,101,2.0 2,102,2.5 2,103,5.0 2,104,2.0 3,101,2.5 3,104,4.0 3,105,4.5 3,107,5.0 4,101,5.0 4,103,3.0 4,104,4.5 4,106,4.0 5,101,4.0 5,102,3.0 5,103,2.0 5,104,4.0 5,105,3.5 5,106,4.0
Step4:
Create a recommender engine in java code, open and edit "App.java".
package com.smims.recommenderintro; import org.apache.mahout.cf.taste.impl.model.file.*; import org.apache.mahout.cf.taste.impl.neighborhood.*; import org.apache.mahout.cf.taste.impl.recommender.*; import org.apache.mahout.cf.taste.impl.similarity.*; import org.apache.mahout.cf.taste.model.*; import org.apache.mahout.cf.taste.neighborhood.*; import org.apache.mahout.cf.taste.recommender.*; import org.apache.mahout.cf.taste.similarity.*; import java.io.*; import java.util.*; class App { public static void main(String[] args) throws Exception { // Load data file DataModel model = new FileDataModel (new File("intro.csv")); UserSimilarity similarity = new PearsonCorrelationSimilarity (model); UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model); // Create recommender engine Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity); // For user 1, recommend 1 item List<RecommendedItem> recommendations = recommender.recommend(1, 1); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } }
Step5:
Before compile the code, we need setting the Mahout dependencies in the pom.xml.
Add these lines under the <dependencies> section in the pom.xml.
org.apache.mahout mahout-core 0.9-SNAPSHOT org.apache.mahout mahout-math 0.9-SNAPSHOT org.apache.mahout mahout-math 0.9-SNAPSHOT test-jar test org.apache.mahout mahout-utils 0.5
Step6:
Compile and run the code.
smims@ubuntu:~/mahout/trunk/project$mvn compile smims@ubuntu:~/mahout/trunk/project$mvn exec:java -Dexec.mainClass="com.smims.recommenderintro.App"
smims@ubuntu:~/mahout/trunk/project$mvn compile [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/smims/mahout/trunk/project/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project --- [INFO] Nothing to compile - all classes are up to date [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.995s [INFO] Finished at: Wed Nov 27 12:10:57 CST 2013 [INFO] Final Memory: 7M/18M [INFO] ------------------------------------------------------------------------ smims@ubuntu:~/mahout/trunk/project$mvn exec:java -Dexec.mainClass="com.smims.recommenderintro.App" [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ project >>> [INFO] [INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ project <<< [INFO] [INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ project --- SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. RecommendedItem[item:104, value:4.257081] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.254s [INFO] Finished at: Wed Nov 27 12:13:01 CST 2013 [INFO] Final Memory: 12M/29M [INFO] ------------------------------------------------------------------------
The recommend result for the user 1 is the 104 item.
No comments:
Post a Comment