上篇文章介紹了協同過濾的安裝與配置,這篇找了幾個協同過濾的簡單例子,看一下
Mahout給我們提供的強大的協同過濾算法。需要新建一個基於Maven的工程,下面是
pom.xml需要導入的包。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mahouttest</groupId> <artifactId>mahouttest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>mahouttest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-core</artifactId> <version>0.8-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies>
這里我們導入的是最新的Mahout包,需要在本地的maven庫中安裝好。
首先我們需要准備好測試的數據,我們就用《Mahout in action》中的例子:
1,101,5 1,102,3 1,103,2.5 2,101,2 2,102,2.5 2,103,5 2,104,2 3,101,2.5 3,104,4 3,105,4.5 3,107,5 4,101,5 4,103,3 4,104,4.5 4,106,4 5,101,4 5,102,3 5,103,2 5,104,4 5,105,3.5 5,106,4
具體對應的關系圖如下:
下面我們用Mahout中三種不同的推薦代碼來執行以下剛才給出的數據,看看Mahout中的推薦接口是
如何使用的。
1. 基於用戶的協同推薦的代碼:
DataModel model =new FileDataModel(new File("data/intro.csv")); UserSimilarity similarity =new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood =new NearestNUserNeighborhood(2,similarity,model); Recommender recommender= new GenericUserBasedRecommender(model,neighborhood,similarity); List<RecommendedItem> recommendations =recommender.recommend(1, 1); for(RecommendedItem recommendation :recommendations){ System.out.println(recommendation); }
執行后的結果是:RecommendedItem[item:104, value:4.257081]
2. 基於Item的協同過濾的代碼:
DataModel model =new FileDataModel(new File("data/intro.csv")); ItemSimilarity similarity =new PearsonCorrelationSimilarity(model); Recommender recommender= new GenericItemBasedRecommender(model,similarity); List<RecommendedItem> recommendations =recommender.recommend(1, 1); for(RecommendedItem recommendation :recommendations){ System.out.println(recommendation); }
執行后的結果是:RecommendedItem[item:104, value:5.0]
3. SlopeOne推薦算法
DataModel model =new FileDataModel(new File("data/intro.csv")); Recommender recommender= new SlopeOneRecommender(model); List<RecommendedItem> recommendations =recommender.recommend(1, 1); for(RecommendedItem recommendation :recommendations){ System.out.println(recommendation); }
執行結果是:RecommendedItem[item:105, value:5.75]