当前位置: 首页 > 推荐系统 > 正文

Mahout中相似度计算类介绍(一)

1 星2 星3 星4 星5 星 (2 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

在推荐系统中,我们需要不同的相似度计算方法来提高推荐准确度。在mahout中有很多类实现了相似度计算方法。
1.基于item相似度的ItemSimilarity接口

public interface ItemSimilarity extends Refreshable {
 
  /**
   * <p>
   * Returns the degree of similarity, of two items, based on the preferences that users have expressed for
   * the items.
   * </p>
   * 
   * @param itemID1 first item ID
   * @param itemID2 second item ID
   * @return similarity between the items, in [-1,1] or {@link Double#NaN} similarity is unknown
   * @throws org.apache.mahout.cf.taste.common.NoSuchItemException
   *  if either item is known to be non-existent in the data
   * @throws TasteException if an error occurs while accessing the data
   */
  double itemSimilarity(long itemID1, long itemID2) throws TasteException;
 
  /**
   * <p>A bulk-get version of {@link #itemSimilarity(long, long)}.</p>
   *
   * @param itemID1 first item ID
   * @param itemID2s second item IDs to compute similarity with
   * @return similarity between itemID1 and other items
   * @throws org.apache.mahout.cf.taste.common.NoSuchItemException
   *  if any item is known to be non-existent in the data
   * @throws TasteException if an error occurs while accessing the data
   */
  double[] itemSimilarities(long itemID1, long[] itemID2s) throws TasteException;
 
  /**
   * @return all IDs of similar items, in no particular order
   */
  long[] allSimilarItemIDs(long itemID) throws TasteException;
}

实现的主要类有:
itemsimilarity
2.类名PearsonCorrelationSimilarity 

名称:皮尔逊相关系数(Pearson Correlation Coefficient)
皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在 [-1,+1] 之间。

公式
pearson
sx, sy是 x 和 y 的样品标准偏差。

原理:用来反映两个变量线性相关程度的统计量

范围:[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小。

说明:
1、 不考虑重叠的数量;
2、 如果只有一项重叠,无法计算相似性(计算过程被除数有n-1);
3、 如果重叠的值都相等,也无法计算相似性(标准差为0,做除数)。

该相似度并不是最好的选择,也不是最坏的选择,只是因为其容易理解,在早期研究中经常被提起。使用Pearson线性相关系数必须假设数据是成对地从正态分布中取得的,并且数据至少在逻辑范畴内必须是等间距的数据。Mahout中,为皮尔森相关计算提供了一个扩展,通过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。

java例子

final DataModel dm = new FileDataModel(new File("e:\\recommend\\item.txt"));//文件名一定要是绝对路径  
 
final ItemSimilarity similarity = new PearsonCorrelationSimilarity(dm);
GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm,similarity);
	        List<RecommendedItem> recommendations=recommender.mostSimilarItems(329387l, 3);
//329387 为itemID
	        for (RecommendedItem recommendation : recommendations) {
				System.out.println(recommendation.getItemID());
				System.out.println(recommendation.getValue());
		}

参考文章:皮尔逊积矩相关系数

本文固定链接: http://www.chepoo.com/mahout-class-similarity-calculation-described-1.html | IT技术精华网

Mahout中相似度计算类介绍(一):等您坐沙发呢!

发表评论