V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
TaihongZhang
V2EX  ›  Python

求教两组间的标签重合度计算,这个应该学习什么算法?

  •  
  •   TaihongZhang · 2019-12-03 00:28:40 +08:00 · 4101 次点击
    这是一个创建于 1817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    向大家请教一下,本人最近刚刚接触编程,学习的 Python,目前有一个想法想要学习:
    就是现在有很多组各不相同的标签,然后想计算两组之间的相似程度,找到重合度最高的。这种算法要学习什么算法呢?有没有 Python 的解决方案?
    lithiumii
        1
    lithiumii  
       2019-12-03 00:34:20 +08:00
    不懂算法,盲猜一个 pca ( Principal component analysis?
    TaihongZhang
        2
    TaihongZhang  
    OP
       2019-12-03 00:40:04 +08:00
    @lithiumii 好的我去看看
    how2code
        3
    how2code  
       2019-12-03 00:45:41 +08:00
    说 PCA 的拉出去 251...

    最简单的应该是关键词 TF IDF + cosine similarity
    ZRS
        4
    ZRS  
       2019-12-03 00:46:39 +08:00
    直接每个 label 单独一维算 cosine 相似度吧
    wangyzj
        6
    wangyzj  
       2019-12-03 01:02:27 +08:00
    @lithiumii 哈哈,我也是这么想的
    klesh
        7
    klesh  
       2019-12-03 01:03:30 +08:00
    看看 Jaccard Similarity 或 Overlap Coefficient 够不够用?

    a = {'foo', 'bar', 'hello', 'world'}
    b = {'foo', 'bar', 'hello', 'world', 'test'}
    c = a.intersection(b)
    d = a.union(b)
    print('js(a, b)=', float(len(c))/float(len(d)))
    print('oc(a, b)=', float(len(c))/float(min(len(a), len(b))))
    Mohanson
        8
    Mohanson  
       2019-12-03 01:08:25 +08:00 via Android
    将对象表示为多维特征向量,然后欧几里德距离搞定
    ecloud
        9
    ecloud  
       2019-12-03 01:33:24 +08:00
    如果仅仅是数人头的话,用统计学就能搞定
    如果要考虑出现的位置上下文关系什么的,那就干脆把每个字节的 ASCII 码作为纵坐标,字节作为横坐标,形成一个波函数
    然后对波形进行拟合,scipy 简直不要太好用了
    nimab
        10
    nimab  
       2019-12-03 01:34:43 +08:00 via Android
    document distance
    cedoo22
        11
    cedoo22  
       2019-12-03 01:41:43 +08:00
    #9 楼略靠谱,关键是相似度怎么量化比较~
    虽然,我不懂算法。
    ClericPy
        12
    ClericPy  
       2019-12-03 09:22:01 +08:00
    猛的就想起 <集体智慧编程> 头两章来了... 欧式距离 皮尔逊相关度什么的... 实习的时候玩过这些, 后来发现还是余弦向量简单又实惠...
    MengQuadra
        13
    MengQuadra  
       2019-12-03 10:27:57 +08:00
    数据区分度大大并且量多话可以用 simhash, 比起其他需要保证输入向量大小相同的方法来说更灵活
    TimePPT
        14
    TimePPT  
       2019-12-03 10:34:22 +08:00
    先定义你想要的相似度是啥?
    lst_a = ['皇上', '皇后', '大臣']
    lst_b = ['国王', '王后', '大臣']

    这俩列表的标签文本字符层面的重叠相似度只有一个签,但要考虑语义相似度可是三个签
    TaihongZhang
        15
    TaihongZhang  
    OP
       2019-12-03 10:58:58 +08:00
    @TimePPT 就是只需要文本字符层面的相似度,不考虑语义,标签是固定的
    TimePPT
        16
    TimePPT  
       2019-12-03 11:08:38 +08:00
    @TaihongZhang 那有啥纠结的,量不大,全部放在两个 set 里直接取个交集不就完了
    cambria
        17
    cambria  
       2019-12-03 13:46:33 +08:00
    楼主只是个初学者,你们都快把支持向量机搬出来了。。。
    @TimePPT 的方法靠谱 python 里有个 set 的数据结构,支持 & 运算符求交集运算,如果不用加权直接计数就可以了
    photon006
        18
    photon006  
       2019-12-03 14:16:06 +08:00
    皮尔逊相关系数
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.