数据集之间的差异

Dom*_*ane 0 python math numpy dataset scipy


我有两个数据集作为列表,例如:

xa = [1, 2, 3, 10, 1383, 0, 12, 9229, 2, 494, 10, 49]    
xb = [1, 1, 4, 12, 1100, 43, 9, 4848, 2, 454, 6, 9]
Run Code Online (Sandbox Code Playgroud)

系列是可能包含数万个数字的市场数据,其长度相同.

我需要找到百分比中的"差异",它表示"百分比系列之间有多少相似性/相异性".
目前我有想法为每个列表构建图表(xa,xb为Y ax,范围(1,len(xa))为X ax).插入xa,xb的函数,然后计算xa,xb(带积分)的面积和xa和xb之间的差异面积.此后,不相似度为(差异区域)*100%/(xa面积+ xb面积).

我想知道这个问题是否有更简单的解决方案.如果不是 - 我怎样才能计算出xa,xb的差异面积?图表是用scipy,numpy,matplotlib构建的.

更新:我正在寻找代表集合之间差异的一个数字.百分之是优选的.

dou*_*oug 5

好吧,如果你想要比较两个1D向量的相似性度量,并且优选地返回0到1(或0和100%)之间的值,则余弦相似性满足那些标准(受结尾的条件限制).(考虑到问题的背景,是否合适,我不知道,但你知道背景,所以你当然可以做出决定.)

import numpy as NP
import numpy.linalg as LA

# generate some data
fnx = lambda : NP.random.randint(0, 10, 10)
s1, s2 = fnx(), fnx()

# a function to calculate cosine similarity
cx = lambda a, b : round(NP.inner(a, b)/(LA.norm(a)*LA.norm(b)), 2)

cx(s1, s2)
# returns 0.85
Run Code Online (Sandbox Code Playgroud)

如果您有许多1D向量,那么一种方法可能是测量这些向量中的每一个与中值向量的余弦相似性.

在一般情况下,余弦相似度返回介于-1和1之间的值,但在使用它的许多(大多数?)实际情况中,可能的值被约束在0和1之间.

其次,余弦相似度的公式是点(a,b)/(范数(a)x范数(b)); NumPy有一个点函数,但是,inner是实现点积的NumPy函数.