余弦相似性计算及python代码实现

A:西米喜欢健身

B:超超不爱健身,喜欢打游戏

step1:分词

A:西米/喜欢/健身

B:超超/不/喜欢/健身,喜欢/打/游戏

step2:列出两个句子的并集

西米/喜欢/健身/超超/不/打/游戏

step3:计算词频向量

A:[1,1,1,0,0,0,0]

B:[0,1,1,1,1,1,1]

step4:计算余弦值

余弦值越大,证明夹角越小,两个向量越相似。

step5:python代码实现

    from functools import reduce   python3中reduce函数集成在functolls里面了
    def mix(self):
        merge_vdict = set(self.vdict1.keys()) | set(self.vdict2.keys())  #vdict1和vdict2分别为两个句子的TF_IDF值,merge_vdict为并集
        for key in merge_vdict:
            self.vdict1[key] = self.vdict1.get(key,0)
            self.vdict2[key] = self.vdict2.get(key,0)   #计算向量

    #余弦函数的实现
    def similar(self):
        self.vector()
        self.mix()
        sum = 0
        for key in self.vdict1:
            sum += self.vdict1[key] * self.vdict2[key]
        A = sqrt(reduce(lambda x,y: x+y, map(lambda x: x*x,self.vdict1.values())))
        B = sqrt(reduce(lambda x,y: x+y, map(lambda x: x*x, self.vdict2.values())))
        return sum/(A*B) 

参考文献:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

  

时间: 2024-07-31 17:04:52

余弦相似性计算及python代码实现的相关文章

MachingLearning中的距离和相似性计算以及python实现

在机器学习中,经常要用到距离和相似性的计算公式,我么要常计算个体之间的差异大小,继而评价个人之间的差异性和相似性,最常见的就是数据分析中的相关分析,数据挖掘中的分类和聚类算法.如利用k-means进行聚类时,判断个体所属的类别,要利用距离计算公式计算个体到簇心的距离,如利用KNN进行分类时,计算个体与已知类别之间的相似性,从而判断个体所属的类别等. 文章编辑的过程中或许存在一个错误或者不合理的地方,欢迎指正. 参考:http://www.cnblogs.com/heaad/archive/201

Softmax Regression及Python代码

Softmax Regression是逻辑回归在多分类问题上的推广,主要用于处理多分类问题,其中任意两个类别之间都是线性可分的. 假设有$k$个类别,每个类别的参数向量为${\theta}_j $,那么对于每个样本,其所属类别的概率为: \[P({{y}_{i}}|X,{{\theta }_{j}})=\frac{{{e}^{{{\theta }_{j}}X}}}{\sum\limits_{l=1}^{k}{{{e}^{{{\theta }_{l}}X}}}}\] 相比如逻辑回归的损失函数,So

python之验证码识别 特征向量提取和余弦相似性比较

0.目录 1.参考2.没事画个流程图3.完整代码4.改进方向 1.参考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wikipedia.org/wiki/%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E6%80%A7 Cosine similarityGiven two vectors of attributes, A and B, the cosine similarity, cos(θ),

计算auc的代码-python

自己写的计算auc的代码,用scikit-learn的auc计算函数sklearn.metrics.auc(x, y, reorder=False)做了一些测试,结果是一样的,如有错误,欢迎指正. 思路:1.首先对预测值进行排序,排序的方式用了python自带的函数sorted,详见注释. 2.对所有样本按照预测值从小到大标记rank,rank其实就是index+1,index是排序后的sorted_pred数组中的索引 3.将所有正样本的rank相加,遇到预测值相等的情况,不管样本的正负性,对

python实现逆波兰计算表达式的代码

如下资料是关于python实现逆波兰计算表达式的代码. symbol_priority = {} symbol_priority[0] = ['#'] symbol_priority[1] = ['('] symbol_priority[2] = ['+', '-'] symbol_priority[4] = [')'] def comparePriority(symbol, RPN_stack, symbol_stack): '''Compare priority between two sy

python学习之——计算给出代码中注释、代码、空行的行数

题目:计算给出代码中注释.代码.空行的行数 来源:网络 思路:注释行以 ‘#’开头,空行以 ‘\n’ 开头,以此作为判断 def count_linenum(fname): fobj = open(fname,"rU") #print fobj.readlines() count_blankline = 0 count_notes = 0 count_code = 0 for eachLine in fobj: if eachLine[0] == '\n': count_blankli

计算Python代码运行时间长度方法

在代码中有时要计算某部分代码运行时间,便于分析. import time start = time.clock() run_function() end = time.clock() print str(end-start) 原文地址:https://www.cnblogs.com/amojury/p/9161745.html

tf–idf算法解释及其python代码实现(下)

tf–idf算法python代码实现 这是我写的一个tf-idf的核心部分的代码,没有完整实现,当然剩下的事情就非常简单了,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四句话,每句表示一个文档 copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班'] 由于中文需要分词,jieba分词是python里面比较好用的分词工具,所以选用jieba分词,文末是jieba的链接.首先对文档进行分词: i

tf–idf算法解释及其python代码实现(上)

tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息检索和文本挖掘中. 一个很自然的想法是在一篇文档中词频越高的词对这篇文档越重要,但同时如果这个词又在非常多的文档中出现的话可能就是很普通的词,没有多少信息,对所在文档贡献不大,例如‘的’这种停用词.所以要综合一个词在所在文档出现次数以及有多少篇文档包含这个词,如果一个词在所在文档出现次数很多同时整个