zoukankan      html  css  js  c++  java
  • 相似度

    类名PearsonCorrelationSimilarity 

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

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

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

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

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

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

    =========================================================================================

    类名:EuclideanDistanceSimilarity

    名称:欧几里德距离(Euclidean Distance)
    最初用于计算欧几里德空间中两个点的距离,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:
    xy
    原理:利用欧式距离d定义的相似度s,s=1 / (1+d)。

    范围:[0,1],值越大,说明d越小,也就是距离越近,则相似度越大。 说明:同皮尔森相似度一样,该相似度也没有考虑重叠数对结果的影响,同样地,Mahout通过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。

    =============================================================================


    类名:UncenteredCosineSimilarity

    名称:余弦相似性(Cosine Similarity)
    Cosine 相似度被广泛应用于计算文档数据的相似度:
    cos
    原理:通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。

    范围:[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。 说明:在数学表达中,如果对两个项的属性进行了数据中心化,计算出来的余弦 相似度和皮尔森相似度是一样的,在mahout中,实现了数据中心化的过程,所以皮尔森相似度值也是数据中心化后的余弦相似度。


    ================================================================

    类名:SpearmanCorrelationSimilarity

    名称:斯皮尔曼相关系数(Spearman Correlation)
    sp
    原理:它利用单调方程评价两个统计变量的相关性。 如果数据中没有重复值, 并且当两个变量完全单调相关时,斯皮尔曼相关系数则为 +1 或 −1 。

    范围:{-1.0,1.0},当一致时为1.0,不一致时为-1.0。

    说明:计算非常慢,有大量排序。针对推荐系统中的数据集来讲,用Spearman 相关系数作为相似度量是不合适的。


    =========================================================================

    类名:TanimotoCoefficientSimilarity
    名称:Tanimoto 系数(Tanimoto Coefficient)
    tan
    原理:Jaccard 系数,又叫做Jaccard相似性系数,用来比较样本集中的相似性和分散性的一个概率。Jaccard系数等于样本集交集与样本集合集的比值

    广义Jaccard系数可以用于文档数据,并在二元属性情况下归约为Jaccard系数。广义Jaccard系数又称Tanimoto系数。(有另一种系数也称为Tanimoto系数)。

    范围:[0,1],完全重叠时为1,无重叠项时为0,越接近1说明越相似。

    说明:处理无打分的偏好数据。

    =====================================================================

    类名:LogLikelihoodSimilarity
    名称:最大似然估计
    最大似然估计,也称为最大概似估计,是一种统计方法,它用来求一个样本集的相关概率密度函数的参数。
    原理
    zui

    范围:[0,1]越接近1说明越相似。

    说明:处理无打分的偏好数据,比Tanimoto系数的计算方法更为智能。

    =========================================================================

    类名:CityBlockSimilarity

    名称:曼哈顿距离

    原理:曼哈顿距离的实现,用于多维数据空间距离的测度。由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点上在标准坐标系上的绝对轴距总和。
    man
    原理图:
    man-tu
    范围:[0,1],同欧式距离一致,值越小,说明距离值越大,相似度越大。

    说明:比欧式距离计算量少,性能相对高。

    =============================================================================


    类名:GenericItemSimilarity
    名称:通用的item Similarity
    java例子:

    GenericItemSimilarity.ItemItemSimilarity similarity = new GenericItemSimilarity.ItemItemSimilarity(2645769,2389682,31.78/100);
     
    		List<GenericItemSimilarity.ItemItemSimilarity> similarities = new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();
    		similarities.add(similarity);
    		//28.002708
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645769,2679041, 28.00/100);
    		similarities.add(similarity);
    		//26.309313
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645769,2656591, 26.30/100);
    		//23.620678
    		similarities.add(similarity);
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645769,2686496, 23.65/100);
    		//22.648125
    		similarities.add(similarity);
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645769,1129187, 22.64/100);
    		similarities.add(similarity);
    		//22.648125
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645767,2599815, 22.63/100);
    		similarities.add(similarity);
    		//22.648125
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645767,2540110, 22.62/100);
    		similarities.add(similarity);
     
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645767,2700438, 22.61/100);
    		similarities.add(similarity);
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645767,2767605, 22.60/100);
    		similarities.add(similarity);
    		similarity = new GenericItemSimilarity.ItemItemSimilarity(2645767,2529194, 22.54/100);
    		similarities.add(similarity);
     
     
    		ItemSimilarity itemSimilarity = new GenericItemSimilarity(similarities); 
     
    		DataModel model = new FileDataModel(new File("e:\recommend\news.txt"));//文件名一定要是绝对路径  
    		GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(model,itemSimilarity);
            List<RecommendedItem> recommendations=recommender.recommend(10, 2);
     
            for (RecommendedItem recommendation : recommendations) {
            	System.out.println(recommendation.getItemID());
    			System.out.println(recommendation.getValue());
    		}

    =========================================================================================


    类名:FileItemSimilarity
    名称:文件item similarity
    该文件形容

    itemID1,itemID2,similarity value
    1,2,0.88
    2,3,0.77

    Java例子:

    final DataModel dm = new FileDataModel(new File("e:\recommend\item.txt"));
    final ItemSimilarity similarity = new FileItemSimilarity(new File("e:\recommend\item.txt"));
    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());
    		}

    =========================================================================================


    类名:TrackItemSimilarity
    Java构造函数

      TrackItemSimilarity(File dataFileDirectory) throws IOException {
        trackData = new FastByIDMap<TrackData>();
        for (String line : new FileLineIterable(KDDCupDataModel.getTrackFile(dataFileDirectory))) {
          TrackData trackDatum = new TrackData(line);
          trackData.put(trackDatum.getTrackID(), trackDatum);
        }
      }

    =========================================================================================


    类名:HybridSimilarity
    基于混合的相似度计算:LogLikelihoodSimilarity*TrackItemSimilarity。
    Java构造函数

     HybridSimilarity(DataModel dataModel, File dataFileDirectory) throws IOException {
        super(dataModel);
        cfSimilarity = new LogLikelihoodSimilarity(dataModel);
        contentSimilarity = new TrackItemSimilarity(dataFileDirectory);
      }

    =========================================================================================


    类名:CachingItemSimilarity
    缓存item similarity 结果

    备注:HybridSimilarity和TrackItemSimilarity不能显示使用。




  • 相关阅读:
    git-format-patch如何指定补丁生成的Subject格式
    openwrt生成的交叉编译器在哪里
    git如何在自动生成补丁时指定补丁名的起始编号
    hyper-v安装虚拟机ubuntu 18.04 64bit后无法使能增强模式怎么办
    Best regards缩写是什么
    git如何自动打补丁
    ubuntu 18.04 64bit build tensorflow report error:C++ compilation of rule '//tensorflow/core/kernels:broadcast_to_op' failed (Exit 4)
    linux安装yaml时出现Could not find a version that satisfies the requirement yaml (from versions: ) No matching distribution found for yaml
    String.format保留小数位数
    BigDecimal的保留位数和四舍五入的方法
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804749.html
Copyright © 2011-2022 走看看