当前位置: 首页 > 面试题库 >

“ Programming Collective Intelligence”中的此python函数有什么问题?

古刚洁
2023-03-14
问题内容

这是有问题的功能。它计算p1和p2的皮尔逊相关系数,假定该系数为-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

问题答案:

看来您可能意外地使用了整数除法。我进行了以下更改,您的函数返回了1.0

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

有关Python中除法运算符的更多信息,请参见PEP
238
。解决上述代码的另一种方法是:

from __future__ import division


 类似资料:
  • 我已经按照本教程使用AWS lambda创建了另一个桶的图像缩略图:http://docs.AWS.amazon.com/lambda/latest/dg/walkthrough-S3-events-adminuser-create-test-function-upload-zip-test.html 我已经完成了教程前面的所有步骤,但是当我从上面的链接在Lambda测试中运行下面的代码时 我收到

  • 问题内容: 我正在尝试在托管bean中进行更新查询。这是代码: 我看到参数设置正确,好像查询中有错误。它进入捕获块。另外,我不知道如何查看堆栈跟踪,e.printStackTrace在这里不起作用,我怎么看?可以帮忙吗? 谢谢 问题答案: 尝试使用executeUpdate而不是executeQuery。我在执行数据库更新时看到了executeQuery的奇怪问题。

  • 本文向大家介绍Python中的id()函数指的什么,包括了Python中的id()函数指的什么的使用技巧和注意事项,需要的朋友参考一下 Python官方文档给出的解释是 id(object) Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be uniqu

  • null 是什么原因造成了这一点?我是不是形成了一个错误的pfx文件?

  • 问题内容: 我正在尝试计算给定日期的第n个工作日。例如,我应该能够计算给定日期的月份中的第三个星期三。 我已经编写了2个版本的函数,该代码可以做到这一点: 控制台输出 这两个函数中的逻辑显然是错误的,但是我似乎无法找到该错误-任何人都可以发现该代码出了什么问题-以及如何解决该问题以返回正确的值? 问题答案: 您的问题在这里: 首先,您用错误的方式减去东西:您需要从所需的日期减去实际的日期,而不是相

  • 问题内容: 我已经使用了numpy库中的zip()函数对元组进行排序,现在我有了一个包含所有元组的列表。从那以后,我修改了该列表,现在我想恢复元组,以便可以使用我的数据。我怎样才能做到这一点? 问题答案: lst1, lst2 = zip(*zipped_list) 应该给您解压缩的列表。 解压缩zipped_list对象。然后,它将所有元组从zipped_list对象传递到zip,zip将它们打

  • 这个查询有什么问题? 错误消息: PreparedStatementCallback;错误的SQL语法[选择u.id,u.user_id,count(不同的pf.id),IfNULL(upm.apprum_autoassign_enable,true)来自用户u内部连接user_roles-ur-on-ur.user_ id=u.id左外部连接user_preference_management-

  • 问题内容: 在我看来不错,但结果是 为什么?怎么了? 问题答案: 您尚未定义“ gs”别名。您只有“ ags”和“ tgs”。