阅读 66

相似度计算的若干函数

  • 相似度计算的若干函数 - 小小的世界

    相似度计算的若干函数

    from math import sqrt

    def sim_distance(p1,p2):

        c=set(p1.keys())&set(p2.keys())

        if not c:return 0

        sum_of_squares=sum([pow(p1.get(sk)-p2.get(sk),2for sk in c])

        p=1/(1+sqrt(sum_of_squares))

        return p

    def sim_distance_pir(p1,p2):

        c=set(p1.keys())&set(p2.keys())

        if not c:return 0

        s1=sum([p1.get(sk)for sk in c])

        s2=sum([p2.get(sk)for sk in c])

        sq1=sum([pow(p1.get(sk),2for sk in c])

        sq2=sum([pow(p2.get(sk),2for sk in c])

        ss=sum([p1.get(sk)*p2.get(sk) for sk in c])

        n=len(c)

        num=ss-(s1*s2/n)

        den=sqrt((sq1-pow(s1,2)/n)*(sq2-pow(s2,2)/n))

        #print s1,s2,sq1,sq2,ss,n,num,den

        if den==0:return 0

        p=num/den

        return p

    def sim_distance_jacc(p1,p2):

        c=set(p1.keys())&set(p2.keys())

        if not c:return 0

        ss=sum([p1.get(sk)*p2.get(sk) for sk in c])

        sq1=sum([pow(sk,2for sk in p1.values()])

        sq2=sum([pow(sk,2for sk in p2.values()])

        p=float(ss)/(sq1 + sq2 - ss)

        return p

     

    def sim_distance_cos(p1,p2):

        c=set(p1.keys())&set(p2.keys())

        if not c:return 0

        ss=sum([p1.get(sk)*p2.get(sk) for sk in c])

        sq1=sqrt(sum([pow(sk,2for sk in p1.values()]))

        sq2=sqrt(sum([pow(sk,2for sk in p2.values()]))

        p=float(ss )/(sq1*sq2)

        return p

    #

    #a={'a':4.5,'b':1.0,'c':7}

     


    from distance import *

    def topsimilar(item,data,n=5,sim_func=sim_distance):

        score=[(sim_func(data.get(item),data.get(ik)),ik) for ik in data.keys() if ik!=item]

        score.sort()

        score.reverse()

        return score

    prefs= {

            "A" : { "1" : 3"2" : 4 , "3" : 0"4":3"5":3},

            "B" : { "1" : 2"2" : 3 , "3" : 2},

            "C" : {"1" : 2"2" : 4"3" : 4"4":3"5":0},

            "D" : {"1" : 0"2" : 4"3" : 0"4"2"5":4}

    }

    print topsimilar('A', prefs,)

    print topsimilar('A', prefs,sim_func=sim_distance_pir)

    print topsimilar('A', prefs,sim_func=sim_distance_cos)

    print topsimilar('A', prefs,sim_func=sim_distance_jacc)

  • 相关阅读:
    浅析C++:private、protected和public
    数据结构关于简单顺序表的构建(C++)
    小小的项目——简单的注释转换
    宏定义实现两数交换
    简易小程序(将字符型数据转换为浮点型数据)
    小小比较格式运算符及截图显示
    python __call__() 方法
    python_selenium简单的滑动验证码
    scrapy 爬虫学习二[中间件的学习]
    scrapy 爬虫学习一

  • 原文地址:https://www.cnblogs.com/lexus/p/2698728.html

  • 最新文章

  • TextFormat
    as3 字符串 根据分隔符分隔数据
    自定义的BaseAdapter实现LIstView的展示
    Flash打开新窗口 被浏览器拦截 navigateToURL被拦截
    flex4, 错误2032, 流错误
    array objct 对象数组
    SpringMVC对静态资源文件的访问(配置)
    Centos配置国内yum源
    mariadb配置允许远程访问方式
    spring 源码

  • 热门文章

  • 解决maven生成的web项目下的servlet.jar与tomcat自带servlet.jar冲突的问题
    Mybatis 源码分析--crud
    Mybatis 源码分析--Configuration.xml配置文件加载到内存
    mybatis学习2
    mybatis学习
    SpringMVC 对比 struts2
    将博客搬至CSDN
    数据结构中顺序表与链表的性能方面比较
    浅谈C++多态性
    浅尝C++中重载、隐藏和覆盖



文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐