首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据集之间的差异

数据集之间的差异
EN

Stack Overflow用户
提问于 2011-02-01 13:53:50
回答 5查看 3K关注 0票数 0

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

代码语言:javascript
复制
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]

序列是市场数据,可能包含数万个数字,它们的长度是相同的。

我需要在百分比中找到“差异”,这表明了“百分比中的序列之间有多少相似/不同”。

目前,我有一个想法,为每个列表(xa,xb作为Y ax,范围(1,len(xa))构建图表作为X ax)。对xa,xb插值函数,然后计算xa,xb (积分)的面积以及xa和xb之间的差面积。在此基础上,差异为(差区)*100%/(xa区+ xb区)。

我不知道这个问题是否有更简单的解决办法。如果不是-如何计算xa,xb的差面积?图表是用are,numpy,matplotlib构建的。

update:我正在寻找一个代表集合之间差异的数字。最好是百分比。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-01 16:45:50

如果您想要一个比较两个一维向量的相似性度量,并且最好返回介于0到1之间的值(或0和100%),那么余弦相似性满足这些条件(但最后要满足条件)。(考虑到问题的背景是否合适,我不知道,但您知道上下文,所以您当然可以做出这样的决定。)

代码语言:javascript
复制
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

如果你有许多一维向量,那么一种方法可能是测量每一个向量的余弦相似性与中值向量。

在一般情况下,余弦相似度在-1和1之间返回值,尽管在许多情况下(大多数?)在实际使用中,可能的值被限制在0到1之间。

第二,余弦相似度的公式是点(a,b)/(范数(A)x范数(B));NumPy有一个点函数,但内部是实现点积的NumPy函数。

票数 5
EN

Stack Overflow用户

发布于 2011-02-01 14:18:39

这在很大程度上取决于你所寻求的“相似性”的性质。

我想到了两种办法。

  • 计算sqrt((X[i]-Y[i])^2)abs(X[i]-Y[i])之和,将其归一化为X和Y,即从最小(X,Y)到最大值(X,Y)。越接近0,数据集就越相似。sqrt版本对小的差异更敏感。
  • 计算相关性,它将给出一个从+1到-1的度量,从‘完全相似’到‘完全不同’。请注意,这种“相似性”并不一定意味着您的系列产品彼此紧密地相互跟踪。看看维基百科文章中的图片。
票数 3
EN

Stack Overflow用户

发布于 2011-02-01 14:36:13

这在很大程度上取决于你想做什么。例如,为了给出一个尚未给出的例子,您可以想象在一个集合中计算元素,而不是两个集合(两个集合的对称差的长度)中的元素--如果数字对应于测量值,那么显然是非常糟糕的。

你说的是时间序列,那么我们可以假设顺序重要吗?

对于时间序列而言,在谱域中计算物体通常是有益的,这是值得考虑的事情。只有一个号码的东西不太可能给你很多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4863404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档