【问题标题】:How to calculate distance or similarity between one item and an item set?如何计算一个项目和一个项目集之间的距离或相似度?
【发布时间】:2013-05-27 16:22:15
【问题描述】:

我所知道的包中的所有距离/相似度函数都旨在计算矩阵中“每一对行”的距离/相似度。

如果输入矩阵非常大,则 dist 矩阵将需要更大的内存,因为 n 行输入矩阵将导致 n*n 大小的 dist 矩阵。

我有一个目标项目 x 和一个项目集 Y,我想计算这个目标项目 x 和 Y 中的每个项目 y 之间的距离/相似度。我如何在 R 中做到这一点?

【问题讨论】:

    标签: r distance similarity


    【解决方案1】:

    这是一个使用 apply 功能的好地方。您想要做的是在您的目标项目 x 和 y 的每个项目之间进行比较。这可以通过对 y 的每一项应用一个函数来完成。

    假设y是一个矩阵,每一列是一个item,这很容易关联,因为它可以计算两个item之间的关联:

    apply(y, 2, cor, x)
    

    这将为您提供一个向量,其中每个元素对应于 x 和 y 的第 i 个项目之间的相关性。

    您也可以根据需要更改关联方法:

    apply(y, 2, cor, x, method="spearman")
    

    如果您使用 dist,这会稍微复杂一些,因为它不需要两个参数。它还假设行是项目而不是列:

    apply(y, 2, function(y.item, x.item) { dist(rbind(y.item, x.item)) }, x)
    

    同样,如果你想使用与默认不同的距离方法(或将其他参数更改为 dist),你总是可以传入更多参数:

    apply(y, 2, function(y.item, x.item, ...) { 
        dist(rbind(y.item, x.item), ...) 
    }, x, method="manhattan")
    

    【讨论】:

    • +1 - 很好的解释 - 我可以补充一点,vegan 包中的函数 vegdist 允许许多其他距离定义,并且可以在与上一个示例相同的庄园中应用。
    【解决方案2】:

    问题可以通过代理包解决

    x<-rnorm(10)         
    x<-matrix(x)                   
    y<-matrix(rnorm(10*5),nrow=5)                
    require( proxy)                     
    dist(t(x),y)                      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      相关资源
      最近更新 更多