标签: pearson

"编程集体智慧"中的皮尔逊算法有什么问题?

这个函数来自"编程集体智慧"一书,并且应该计算p1和p2的Pearson相关系数,它应该是介于-1和1之间的数字.

如果两个评论家对项目的评价非常相似,那么函数应该返回1,或接近1.

有了真实的用户数据,我有时会得到奇怪的结果.在以下示例中,数据集critics2应返回1 - 而不是返回0.

有没有人发现错误?

(这不是"编程集体智慧"中这个python函数什么问题的重复)

from __future__ import division
from math import sqrt

def sim_pearson(prefs,p1,p2):
    si={}
    for item in prefs[p1]: 
        if item in prefs[p2]: si[item]=1
    if len(si)==0: return 0
    n=len(si)
    sum1=sum([prefs[p1][it] for it in si])
    sum2=sum([prefs[p2][it] for it in si])
    sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
    sum2Sq=sum([pow(prefs[p2][it],2) for it in si]) 
    pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
    num=pSum-(sum1*sum2/n)
    den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
    if den==0: return 0
    r=num/den
    return r

critics = {
    'user1':{
        'item1': 3,
        'item2': 5,
        'item3': 5, …
Run Code Online (Sandbox Code Playgroud)

python algorithm pearson

5
推荐指数
1
解决办法
2714
查看次数

皮尔逊相关相似度和调整余弦相似度有什么区别?

虽然它们非常相似,但我确信皮尔逊相关相似度和调整余弦相似度之间存在一些差异,因为所有论文和网页都将它们分为两种不同的类型。

然而,他们都没有提供明确的定义。是其中一页。

谁能说出其中的区别吗?

谢谢

similarity pearson cosine-similarity

5
推荐指数
1
解决办法
4452
查看次数

为什么Pearson相关输出是NaN?

我正在尝试获取R中变量之间的Pearson相关系数。这是变量的散点图:

ggplot(results_summary, aes(x =D_in, y = D_ex)) + geom_point(col=ifelse(results_summary$FDR < 0.05, ifelse(results_summary$logF>0, "red", "green" ), "black"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如您所见,变量之间的相关性很好,因此我期望相关系数很高。但是,当我尝试获得Pearson相关系数时,我得到的是NaN!

> cor(results_summary$D_in, results_summary$D_ex, method="spearman")
[1] 0.868079
> cor(results_summary$D_in, results_summary$D_ex, method="kendall")
[1] 0.6973086
> cor(results_summary$D_in, results_summary$D_ex, method="pearson")
[1] NaN
Run Code Online (Sandbox Code Playgroud)

我检查了我的数据是否包含任何NaN:

> nrow(subset(results_summary, is.nan(results_summary$D_ex)==TRUE)) 
[1] 0
> nrow(subset(results_summary, is.nan(results_summary$D_in)==TRUE)) 
[1] 0
> cor(results_summary$D_in, results_summary$D_ex, method="pearson", use="complete.obs")
[1] NaN
Run Code Online (Sandbox Code Playgroud)

但是似乎这不是产生NaN的原因。有人可以提供任何有关这里可能发生的情况的线索吗?

谢谢你的时间!

statistics r pearson

5
推荐指数
1
解决办法
5134
查看次数

这个来自"编程集体智慧"的python函数出了什么问题?

这是有问题的功能.它计算p1和p2的Pearson相关系数,它应该是介于-1和1之间的数字.

当我将它与真实用户数据一起使用时,它有时会返回一个大于1的数字,如下例所示:

def sim_pearson(prefs,p1,p2):
    si={}
    for item in prefs[p1]: 
        if item in prefs[p2]: si[item]=1

    if len(si)==0: return 0

    n=len(si)

    sum1=sum([prefs[p1][it] for it in si])
    sum2=sum([prefs[p2][it] for it in si])

    sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
    sum2Sq=sum([pow(prefs[p2][it],2) for it in si]) 

    pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])

    num=pSum-(sum1*sum2/n)
    den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))

    if den==0: return 0

    r=num/den

    return r

critics = {
    'user1':{
        'item1': 3,
        'item2': 5,
        'item3': 5,
        },

    'user2':{
        'item1': 4,
        'item2': 5,
        'item3': 5,
        }
}

print sim_pearson(critics, 'user1', 'user2', )

1.15470053838
Run Code Online (Sandbox Code Playgroud)

python algorithm pearson

4
推荐指数
1
解决办法
660
查看次数

统计相关性:Pearson还是Spearman?

我在区间[0,1]中有2个45个值的系列.第一个系列是人工生成的标准,第二个系列是计算机生成的(完整系列在这里http://www.copypastecode.com/74844/).第一个系列逐渐排序.

0.909090909 0.216196598
0.909090909 0.111282099
0.9 0.021432587
0.9 0.033901106
...
0.1 0.003099256
0   0.001084533
0   0.008882249
0   0.006501463
Run Code Online (Sandbox Code Playgroud)

现在我要评估的是第二个系列中订单保留的程度,因为第一个系列是单调的.该Pearson相关是0.454763067,但我认为我们之间的关系不是线性的,所以这个值是难以解释.

一种自然的方法是使用Spearman等级相关,在这种情况下是0.670556181.我注意到随机值,当Pearson非常接近0时,Spearman等级相关性上升到0.5,所以0.67的值似乎非常低.

您将使用什么来评估这两个系列之间的顺序相似性?

statistics analysis pearson correlation

3
推荐指数
1
解决办法
5970
查看次数

Apache Mahout + Pearson Correlation忽略每个项目具有相同首选项的用户

我正在使用Mahout和Pearson Correlation算法根据他们对几个项目的偏好来比较和查找类似的用户.我遇到的问题是Mahout和/或Pearson忽略了为每个项目选择相同偏好的用户.有没有人知道是否有办法配置Mahout,不要忽略为每个项目选择相同偏好值的人.

pearson mahout

3
推荐指数
1
解决办法
881
查看次数

R将名称转换为数字

我有一个捐赠和捐赠者姓名的数据框.

**donation**              **Donor**
 25.00               Steve Smith
 20.00               Jack Johnson
 50.00               Mary Jackson
  ...                   ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用该pvclust包进行一些聚类.不幸的是,包似乎没有采用非数字数据.

> rs1.pv1 <- parPvclust(cl, rs1, nboot=10)
Error in cor(x, method = "pearson", use = use.cor) : 'x' must be numeric
Run Code Online (Sandbox Code Playgroud)

我有两个问题.

1)是否有其他包装或方法可以做得更好?

2)有没有办法"规范化"捐赠者名单?即获得唯一的捐赠者名称列表,为每个捐赠者名称分配一个ID号,然后将ID号插入数据框中代替字符名称.

r pearson pvclust

3
推荐指数
1
解决办法
4262
查看次数

当您的数据是观察列表时,在R中进行卡方检验

当您的数据采用观察列表的形式时,是否可以计算R中的平方?我的意思是,如果你知道十字架,就很容易得到平方.例如,如果您有一项调查,并且您要求性别和一个真假问题,那么您只需要四个数字来计算卡方.我所拥有的是两列数据,每个受访者的答案.是否有可能从这个数据结构中得到平方,或者我必须转换它?

如果我必须将它转换为R,有没有人知道另一种语言可以让我直接得到chi平方?

statistics r chi-squared pearson

3
推荐指数
1
解决办法
1318
查看次数

大数字的相关结果错误

cor()如果向量中存在极大数字并且仅返回零,则函数无法计算相关值:

foo <- c(1e154, 1, 0)
bar <- c(0, 1, 2)
cor(foo, bar)
# -0.8660254
foo <- c(1e155, 1, 0)
cor(foo, bar)
# 0
Run Code Online (Sandbox Code Playgroud)

虽然1e155非常大,但它比R可以处理的最大数量小得多.令我惊讶的是,为什么R返回错误的值并且没有返回更合适的结果,如NAInf.

有什么理由吗?如何确保我们的计划不会遇到这种情况?

r bignum pearson correlation

2
推荐指数
1
解决办法
203
查看次数

k表示聚类算法

我想对一组10个数据点执行ak均值聚类分析,每个数据点都具有与之关联的4个数值数组。我正在使用Pearson相关系数作为距离度量。我完成了k均值聚类算法的前两个步骤:

1)选择一组k个聚类的初始中心。[我随机选择了两个初始中心]

2)将每个对象分配给具有最近中心的聚类。[我使用Pearson相关系数作为距离度量标准-见下文]

现在,我需要帮助来了解算法的第三步:

3)计算集群的新中心:

新中心的公式 条件

其中,在这种情况下,X是4维向量,n是群集中数据点的数量。

对于以下数据,我将如何计算C(S)?

# Cluster 1
A   10  15  20  25  # randomly chosen centre
B   21  33  21  23
C   43  14  23  23
D   37  45  43  49
E   40  43  32  32

# Cluster 2
F  100  102 143 212 #random chosen centre
G  303  213 212 302
H  102  329 203 212
I  32   201 430 48
J  60   99  87  34
Run Code Online (Sandbox Code Playgroud)

k均值算法的最后一步是重复步骤2和3,直到没有任何对象改变簇为止,这非常简单。

我需要有关步骤3的帮助。计算群集的新中心。如果有人可以讲解并解释如何计算仅一个集群的新中心,那将对我有极大的帮助。

algorithm cluster-analysis data-mining pearson k-means

2
推荐指数
1
解决办法
3933
查看次数