我正在使用Pandas.rolling_corr计算两个Pandas系列的相关性。
pd.rolling_corr(x, y, 10)X和y的变化很小。例如
x[0] = 1.3342323
x[1] = 1.3342317由于相关是协方差除以标准差,所以当标准差为0时,相关应仅为inf或-inf。但是,在我所拥有的数据集中,值非常接近,但没有一个值与另一个值完全相同。但出于某种原因,我在关联中得到了inf或-inf值。
下面是我的问题:在pandas.rolling_corr中是否有一个限制,在这个限制中,如果数字太小,数字就会自动四舍五入?(x<1e-7)
我正在处理的数据集(x和y)位于“float64”中,我已经将chop_threshold设置为0。
编辑*以下是我正在处理的数据示例。我试图计算这两列之间的相关性,但结果是inf。
1144 679.5999998
1144 679.600001
1143.75 679.6000003
1143.75 679.5999993
1143 679.6000009发布于 2015-07-05 19:31:33
我认为这可以更普遍地看作是一个关于精确性的问题,而不是一个相关性的问题。一般来说,你可以预期幕后的事情会以双倍的精度完成,这意味着在小数点13或14位左右,事情会变得不稳定(但在很多情况下,肯定是在小数点11或12位(或更少))。
下面是一个小示例程序,它从'x‘列(1e0)中的1开始,然后逐步下降到1e-20。
pd.options.display.float_format = '{:12,.9f}'.format
df_corr = pd.DataFrame()
diffs = np.arange(4)
for i in range(20):
df = pd.DataFrame({ 'x': [1,1,1,1], 'y':[5,7,8,6] })
df['x'] = df['x'] + diffs*.1**i
df_corr = df_corr.append( pd.rolling_corr(df.x,df.y,3)[2:4], ignore_index=True )在查看结果之前,请先发表几点意见。首先,熊猫的默认显示有时会隐藏非常小的数字差异,因此您需要强制以某种方式进行更精确的格式化。这里我用了pd.options。
第二,我不会在这里添加大量的注释,但是您需要知道的主要是'x‘列在每个循环中都是不同的。如果愿意,可以添加print语句,但前4次迭代如下所示:
iteration values of column 'x'
0 [ 1. 2. 3. 4. ]
1 [ 1. 1.1 1.2 1.3 ]
2 [ 1. 1.01 1.02 1.03 ]
3 [ 1. 1.001 1.002 1.003 ]因此,当我们开始以后的迭代时,差异将非常小,以至于熊猫只会把它看作[1,1,1,1]。那么,实际的问题是,在什么时候,这种差异如此之小,以致于熊猫无法分辨。
为了使其更加具体,这是第8次迭代的样子(而且rolling_corr使用了一个3的窗口,因为这个数据集只有4行):
x y
0 1.000000000 5
1 1.000000100 7
2 1.000000200 8
3 1.000000300 6下面是结果,其中的索引值也给出了迭代次数(因此也给出了列‘x’中差异的精度)。
df_corr
2 3
0 0.981980506 -0.500000000
1 0.981980506 -0.500000000
2 0.981980506 -0.500000000
3 0.981980506 -0.500000000
4 0.981980506 -0.500000000
5 0.981980506 -0.500000000
6 0.981980505 -0.500000003
7 0.981980501 -0.500000003
8 0.981980492 -0.499999896
9 0.981978898 -0.500001485
10 0.981971784 -0.500013323
11 0.981893289 -0.500133227
12 0.981244570 -0.502373626
13 0.976259968 -0.505124339
14 0.954868546 -0.132598709
15 0.785584405 1.060660172
16 0.000000000 0.000000000
17 nan nan
18 nan nan
19 nan nan所以你可以看到,你得到了合理的结果,降到了小数点13位(尽管在此之前,精确度在下降),然后它们就会分崩离析,尽管你直到十七号才真正得到南恩。
我不知道如何直接回答你的问题,但希望这能给你一些启示。我想说的是,在这些计算中并没有出现自动舍入这样的事情,但是很难推广。当然,有些算法比其他算法在精确类型问题上处理得更好,但是不可能在此做出任何广泛的概括,即使在熊猫内部的不同功能或方法之间也是如此。(例如,由于精度问题,目前正在讨论numpy是如何得到与熊猫类似功能不同的答案的。)
https://stackoverflow.com/questions/31226102
复制相似问题