根据用户协同过滤,根据用户的相似度,推荐相应的item。
pom.xml加入核心的几个依赖
<!-- https://mvnrepository.com/artifact/org.apache.mahout/mahout-core --> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-core</artifactId> <version>0.9</version> </dependency> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-integration</artifactId> <version>0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
java代码:
/** * * @param userId 用户id * @param n 返回推荐条数 * @return 数组,kl_id * @throws TasteException * @throws ClassNotFoundException */ public int[] recommendByUser(Integer userId, int n) throws TasteException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setServerName("");//本地为localhost dataSource.setUser("root"); dataSource.setPassword("mysql"); dataSource.setDatabaseName("knowledgeManagement");//数据库名 /* preferenceTable:表名 userIDColumn:userId的字段名 itemIDColumn:itemId的字段名 preferenceColumn:偏好值字段名 timestampColumn:时间记录字段//可为空 */ JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource , "kl_rating_comment" , "user_id" , "kl_id","kl_rating","kl_comment_time"); //获取模型 DataModel model = dataModel; //计算相似度 UserSimilarity similarity = new PearsonCorrelationSimilarity(model); //计算阈值,选择邻近的2个用户 UserNeighborhood neighborhood = new NearestNUserNeighborhood(2 ,similarity,model); //推荐集合 Recommender recommender = new GenericUserBasedRecommender(model,neighborhood,similarity); //推荐数量 为n的一个合集,这里数量可以修改 List<RecommendedItem> recommendedItems = recommender.recommend(userId,n); int kl_idArray[] = new int[recommendedItems.size()]; for (int i=0;i<recommendedItems.size();i++){ kl_idArray[i] = (int) recommendedItems.get(i).getItemID(); } //下面是测试用的代码 for (RecommendedItem recommendation : recommendedItems) { System.out.println(recommendation); } System.out.println("-------------"); for (int i= 0;i<kl_idArray.length;i++){ System.out.println(kl_idArray[i]); } return kl_idArray; }