精华内容
下载资源
问答
  • 编辑距离 编辑距离,又称为Levenshtein距离,是用于计算一个字符串转换为另一个字符串时,插入、删除和替换的... 本文标题: python文本数据相似度的度量 本文地址: http://www.cppcns.com/jiaoben/python/222257.html

    编辑距离

    编辑距离,又称为Levenshtein距离,是用于计算一个字符串转换为另一个字符串时,插入、删除和替换的次数。例如,将'dad'转换为'bad'需要一次替换操作,编辑距离为1。

    nltk.metrics.distance.edit_distance函数实现了编辑距离。

    from nltk.metrics.distance import edit_distance

    str1 = 'bad'

    str2 = 'dad'

    print(edit_distance(str1, str2))

    N元语法相似度

    n元语法只是简单地表示文本中n个标记的所有可能的连续序列。n元语法具体是这样的

    import nltk

    #这里展示2元语法

    text1 = 'Chief Executive Officer'

    #bigram考虑匹配开头和结束,所有使用pad_right和pad_left

    ceo_bigrams = nltk.bigrams(text1.split(),pad_right=True,pad_left=True)

    print(list(ceo_bigrams))

    [(None, 'Chief'), ('Chief', 'Executive'),

    ('Executive', 'Officer'), ('Officer', None)]

    2元语法相似度计算

    import nltk

    #这里展示2元语法

    def bigram_distance(text1, text2):

    #bigram考虑匹配开头和结束,所以使用pad_right和pad_left

    text1_bigrams = nltk.bigrams(text1.split(),pad_right=True,pad_left=True)

    text2_bigrams = nltk.bigrams(text2.split(), pad_right=True, pad_left=True)

    #交集的长度

    distance = len(set(text1_bigrams).intersection(set(text2_bigrams)))

    return distance

    text1 = 'Chief Executive Officer is manager'

    text2 = 'Chief Technology Officer is technology manager'

    print(bigram_distance(text1, text2)) #相似度为3

    jaccard相似性

    jaccard距离度量的两个集合的相似度,它是由 (集合1交集合2)/(结合1交结合2)计算而来的。

    实现方式

    from nltk.metrics.distance import jaccard_distance

    #这里我们以单个的字符代表文本

    set1 = set(['a','b','c','d','a'])

    set2 = set(['a','b','e','g','a'])

    print(jaccard_distance(set1, set2))

    0.6666666666666666

    masi距离

    masi距离度量是jaccard相似度的加权版本,当集合之间存在部分重叠时,通过调整得分来生成小于jaccard距离值。

    from nltk.metrics.distance import jaccard_distance,masi_distance

    #这里我们以单个的字符代表文本

    set1 = set(['a','b','c','d','a'])

    set2 = set(['a','b','e','g','a'])

    print(jaccard_distance(set1, set2))

    print(masi_distance(set1, set2))

    0.6666666666666666

    0.22000000000000003

    余弦相似度

    nltk提供了余弦相似性的实现方法,比如有一个词语空间

    word_space = [w1,w2,w3,w4]

    text1 = 'w1 w2 w1 w4 w1'

    text2 = 'w1 w3 w2'

    #按照word_space位置,计算每个位置词语出现的次数

    text1_vector = [3,1,0,1]

    text2_vector = [1,1,1,0]

    [3,1,0,1]意思是指w1出现了3次,w2出现了1次,w3出现0次,w4出现1次。

    好了下面看代码,计算text1与text2的余弦相似性

    from nltk.cluster.util import cosine_distance

    text1_vector = [3,1,0,1]

    text2_vector = [1,1,1,0]

    print(cosine_distance(text1_vector,text2_vector))

    0.303689376177

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: python文本数据相似度的度量

    本文地址: http://www.cppcns.com/jiaoben/python/222257.html

    展开全文
  • python中的实现: importnumpy as np x=np.random.random(10) y=np.random.random(10)#方法一:根据公式求解 x_=x-np.mean(x) y_=y-np.mean(y) d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))#方法二...

    7.夹角余弦(Cosine)

    也可以叫余弦相似度。 几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

    (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

    2011030823283429.png

    (2) 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

    类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

    2011030823293892.png

    即:

    2011030823294588.png

    余弦取值范围为[-1,1]。求得两个向量的夹角,并得出夹角对应的余弦值,此余弦值就可以用来表征这两个向量的相似性。夹角越小,趋近于0度,余弦值越接近于1,它们的方向更加吻合,则越相似。当两个向量的方向完全相反夹角余弦取最小值-1。当余弦值为0时,两向量正交,夹角为90度。因此可以看出,余弦相似度与向量的幅值无关,只与向量的方向相关。

    140867-20170616162830681-298066459.png

    importnumpy as np

    x=np.random.random(10)

    y=np.random.random(10)#方法一:根据公式求解

    d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))#方法二:根据scipy库求解

    from scipy.spatial.distance importpdist

    X=np.vstack([x,y])

    d2=1-pdist(X,'cosine')

    两个向量完全相等时,余弦值为1,如下的代码计算出来的d=1。

    d=1-pdist([x,x],'cosine')

    8.皮尔逊相关系数(Pearson correlation)

    (1) 皮尔逊相关系数的定义

    2011030823322444.png

    前面提到的余弦相似度只与向量方向有关,但它会受到向量的平移影响,在夹角余弦公式中如果将 x 平移到 x+1, 余弦值就会改变。怎样才能实现平移不变性?这就要用到皮尔逊相关系数(Pearson correlation),有时候也直接叫相关系数。

    如果将夹角余弦公式写成:

    140867-20170616171015712-321753303.gif

    表示向量x和向量y之间的夹角余弦,则皮尔逊相关系数则可表示为:

    140867-20170616171115978-1921751472.gif

    皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。

    在python中的实现:

    importnumpy as np

    x=np.random.random(10)

    y=np.random.random(10)#方法一:根据公式求解

    x_=x-np.mean(x)

    y_=y-np.mean(y)

    d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))#方法二:根据numpy库求解

    X=np.vstack([x,y])

    d2=np.corrcoef(X)[0][1]

    相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

    9.汉明距离(Hamming distance)

    (1)汉明距离的定义

    两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。

    应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

    在python中的实现:

    importnumpy as npfrom scipy.spatial.distance importpdist

    x=np.random.random(10)>0.5y=np.random.random(10)>0.5x=np.asarray(x,np.int32)

    y=np.asarray(y,np.int32)#方法一:根据公式求解

    d1=np.mean(x!=y)#方法二:根据scipy库求解

    X=np.vstack([x,y])

    d2=pdist(X,'hamming')

    10.杰卡德相似系数(Jaccard similarity coefficient)

    (1) 杰卡德相似系数

    两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

    2011030823303566.png

    杰卡德相似系数是衡量两个集合的相似度一种指标。

    (2) 杰卡德距离

    与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:

    2011030823310119.png

    杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

    (3) 杰卡德相似系数与杰卡德距离的应用

    可将杰卡德相似系数用在衡量样本的相似度上。

    样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

    在python中的实现:

    importnumpy as npfrom scipy.spatial.distance importpdist

    x=np.random.random(10)>0.5y=np.random.random(10)>0.5x=np.asarray(x,np.int32)

    y=np.asarray(y,np.int32)#方法一:根据公式求解

    up=np.double(np.bitwise_and((x != y),np.bitwise_or(x != 0, y !=0)).sum())

    down=np.double(np.bitwise_or(x != 0, y !=0).sum())

    d1=(up/down)#方法二:根据scipy库求解

    X=np.vstack([x,y])

    d2=pdist(X,'jaccard')

    11.布雷柯蒂斯距离(Bray Curtis Distance)

    Bray Curtis距离主要用于生态学和环境科学,计算坐标之间的距离。该距离取值在[0,1]之间。它也可以用来计算样本之间的差异。

    140867-20170619090440366-1112476926.png

    样本数据:

    760108-20161107104112389-2075687132.png

    计算:

    760108-20161107104207811-2038201254.png

    在python中的实现:

    importnumpy as npfrom scipy.spatial.distance importpdist

    x=np.array([11,0,7,8,0])

    y=np.array([24,37,5,18,1])#方法一:根据公式求解

    up=np.sum(np.abs(y-x))

    down=np.sum(x)+np.sum(y)

    d1=(up/down)#方法二:根据scipy库求解

    X=np.vstack([x,y])

    d2=pdist(X,'braycurtis')

    展开全文
  • I have an 1D array of numbers, and want to calculate all pairwise euclidean distances. I have a method (thanks to SO) of doing this with broadcasting, but it's inefficient because it calculates each d...

    I have an 1D array of numbers, and want to calculate all pairwise euclidean distances. I have a method (thanks to SO) of doing this with broadcasting, but it's inefficient because it calculates each distance twice. And it doesn't scale well.

    Here's an example that gives me what I want with an array of 1000 numbers.

    import numpy as np

    import random

    r = np.array([random.randrange(1, 1000) for _ in range(0, 1000)])

    dists = np.abs(r - r[:, None])

    What's the fastest implementation in scipy/numpy/scikit-learn that I can use to do this, given that it has to scale to situations where the 1D array has >10k values.

    Note: the matrix is symmetric, so I'm guessing that it's possible to get at least a 2x speedup by addressing that, I just don't know how.

    解决方案

    Neither of the other answers quite answered the question - 1 was in Cython, one was slower. But both provided very useful hints. Following up on them suggests that scipy.spatial.distance.pdist is the way to go.

    Here's some code:

    import numpy as np

    import random

    import sklearn.metrics.pairwise

    import scipy.spatial.distance

    r = np.array([random.randrange(1, 1000) for _ in range(0, 1000)])

    c = r[:, None]

    def option1(r):

    dists = np.abs(r - r[:, None])

    def option2(r):

    dists = scipy.spatial.distance.pdist(r, 'cityblock')

    def option3(r):

    dists = sklearn.metrics.pairwise.manhattan_distances(r)

    Timing with IPython:

    In [36]: timeit option1(r)

    100 loops, best of 3: 5.31 ms per loop

    In [37]: timeit option2(c)

    1000 loops, best of 3: 1.84 ms per loop

    In [38]: timeit option3(c)

    100 loops, best of 3: 11.5 ms per loop

    I didn't try the Cython implementation (I can't use it for this project), but comparing my results to the other answer that did, it looks like scipy.spatial.distance.pdist is roughly a third slower than the Cython implementation (taking into account the different machines by benchmarking on the np.abs solution).

    展开全文
  • Euclidean distanceManhattan distanceMinkowski distanceCosine similaraityJaccard similarity代码:.../usr/bin/env pythonfrom math import*from decimal import Decimalclass Similarity():""...

    Euclidean distance

    Manhattan distance

    Minkowski distance

    Cosine similaraity

    Jaccard similarity

    代码:similaritymeasures.py

    #!/usr/bin/env python

    from math import*

    from decimal import Decimal

    class Similarity():

    """ Five similarity measures function """

    def euclidean_distance(self,x,y):

    """ return euclidean distance between two lists """

    return sqrt(sum(pow(a-b,2) for a, b in zip(x, y)))

    def manhattan_distance(self,x,y):

    """ return manhattan distance between two lists """

    return sum(abs(a-b) for a,b in zip(x,y))

    def minkowski_distance(self,x,y,p_value):

    """ return minkowski distance between two lists """

    return self.nth_root(sum(pow(abs(a-b),p_value) for a,b in zip(x, y)),p_value)

    def nth_root(self,value, n_root):

    """ returns the n_root of an value """

    root_value = 1/float(n_root)

    return round (Decimal(value) ** Decimal(root_value),3)

    def cosine_similarity(self,x,y):

    """ return cosine similarity between two lists """

    numerator = sum(a*b for a,b in zip(x,y))

    denominator = self.square_rooted(x)*self.square_rooted(y)

    return round(numerator/float(denominator),3)

    def square_rooted(self,x):

    """ return 3 rounded square rooted value """

    return round(sqrt(sum([a*a for a in x])),3)

    def jaccard_similarity(self,x,y):

    """ returns the jaccard similarity between two lists """

    intersection_cardinality = len(set.intersection(*[set(x), set(y)]))

    union_cardinality = len(set.union(*[set(x), set(y)]))

    return intersection_cardinality/float(union_cardinality)

    使用方法:

    #!/usr/bin/env python

    from similaritymeasures import Similarity

    def main():

    """ main function to create Similarity class instance and get use of it """

    measures = Similarity()

    print measures.euclidean_distance([0,3,4,5],[7,6,3,-1])

    print measures.jaccard_similarity([0,1,2,5,6],[0,2,3,5,7,9])

    if __name__ == "__main__":

    main()

    展开全文
  • I have an 1D array of numbers, and want to calculate all pairwise euclidean distances. I have a method (thanks to SO) of doing this with broadcasting, but it's inefficient because it calculates each d...
  • python-Levenshtein 使用 使用 pip install python-Levenshtein 指令安装 Levenshtein # -*- coding: utf-8 -*- import difflib # import jieba import Levenshtein str1 = "我的骨骼雪白 也长不出青稞" str2 = "雪...
  • 今天我们要介绍的是python中的一个较为强大的统计分析包(Statsmodels),不过需要强调的是python因为本身并不是专门用于经济计量分析的软件,其包在计量分析性能上可能远不及stata,不过这并不影响我们学习这个包,...
  • )我不知道你计量工作是否应该用python,因为不知道你需求的功能是什么,但py有很多数量分析的工县很强大,比如pandas,比如我用的细分行业到用来炒股的rqalpha,我只需一段代码就可以获取所有国内股票的...
  • Python社会统计与计量分析Part-1 Python初探01. Python语法结构概览教学内容: 兼顾应用广泛的Python 2.x与日益兴盛的Python 3.x,从最基本的原理和语法格式入手, 教授Python的基础内容。教学目的: 深入Python的...
  • Python作为计量分析工具,实际上主要用到了两个modules: ...可以到咱们Python计量研究组访问,先对这两个模块的基本框架熟悉一下。   以下就是Python按照时间先后顺序现在所有的modules     ...
  • 1简介Pysal是一个面向地理空间数据科学的开源跨平台库,重点是用python编写的地理空间矢量数据。它支持空间分析高级应用程序的开发,例如空间簇、热点和异常点的检测从空间数据构建图形地理嵌入网络的空间回归与统计...
  • python计量经济学

    2014-06-24 10:35:06
    美国大学讲义,python的代码!美国原版很适合自学python数据处理
  • Python计量经济学模型 用于构建计量经济学模型的Python软件包。 可用型号 固定效应Logistic回归(Logit) 随机效应Logistic回归(Logit和Probit) Tobit I(截断数据的线性回归) 从源安装 从Github下载并提取源...
  • 这套笔记将重点介绍Python计量经济学与统计分析中的应用。内容涵盖Python基本数据类型,Numpy科学运算,Pandas数据分析,统计分析,蒙特卡洛过程,最优化过程,数据可视化功能,以及在计量经济与统计模型中的应用...
  • 基于Python计量电能表管理系统设计与实现.pdf
  • python计量经济学1 anaconda安装:https://www.anaconda.com/products/individual 安装教程 链接 conda常见命令: conda安装第三方包: conda install requests 或者 pip install requests 来安装requests包. ...
  • Python-计量经济学案例

    千次阅读 多人点赞 2019-06-07 23:16:03
    python线性回归二元线性回归:code:output:化为线性的非线性实例:code:output:虚拟变量(哑变量):code:output:因变量预测:code:output: 二元线性回归: 模型假设: 假设中国2013年各地区人均现金消费支出与...
  • statsmodels:在Python中的统计建模和计量经济学

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,549
精华内容 3,019
关键字:

python计量

python 订阅