发明内容
本发明所要解决的技术问题是提供一种基于时序数据分布特征的自适应无损压缩方法。
为解决以上技术问题,本发明的技术方案为:提供一种基于时序数据分布特征的自适应无损压缩方法,其创新点在于:包括一个预测器、一个压缩器和一个解压缩器,具体包括以下步骤:
(1)将所有的数据分为多个数据块,预测器按照数值的时间戳顺序,从开始时间往后,依次读入一个数据块中一串时间序列数据的值;
(2)预测器先保留数据块中最前面的几个值依次放入预测器缓存中用作预测使用,同时将保留的值直接转换成64位补码的形式依次放入压缩器,预测公式由预先指定;
(3)预测器根据缓存中保存的值以及预测公式得出下一个时间点的预测值,在读入下一个时间点的实际值之后,计算出预测值和实际值的偏差,同时计算出预测值和实际值的二进制补码的异或运算结果,将异或运算结果按顺序放入压缩器;
(4)预测器根据预测值和实际值的偏差,先计算出损失值,再根据损失值计算出每个参数的损失梯度,最后根据损失梯度分别计算出参数a和参数b的更新值,并将每次需要更新的值记录在预测器的缓存中;
(5)当一个数据块的数据全部经过预测器处理后,压缩器将得到的最先保留的值的64位补码和之后的所有预测值和实际值的64位补码的异或操作结果的二进制拼接起来;
(6)分别计算预测器缓存中保存的每个参数每次需要更新的值的代数平均值,并根据调整相应的参数;将调整之前的参数和压缩器中拼接得到的二进制串持久化储存在硬盘中;
(7)预测器继续读入下一个数据块,并使用调整后的参数重复步骤(1)—(6);
(8)需要恢复数据时,解压缩器首先根据当前参数恢复预测公式;根据二进制串的前几个二进制位恢复该数据块的前几个数;根据数据块的前几个数预测下一个数,根据预测值和存储的二进制异或串恢复出真实值。
进一步的,所述步骤(1)中的每个数据块中的值的数量根据实际预先指定。
进一步的,所述步骤(2)中的保留的值的数量与预测公式所依赖的前置窗口的大小对应。
进一步的,所述步骤(2)中的预测算法包括线性组合、指数、对数和三角运算,所述线性组合、指数、对数和三角运算的算法公式分别为:
其中,x
i为时间序列x在i时刻的值;x
i-1为时间序列x在i-1时刻的值,即i前一时刻的值;x
i-2为时间序列x在i-2时刻的值,即i前两个时刻的值;
为采用预测算法计算出的i时刻的预测值;a、b和c均为可学习的实数,即a、b和c均根据预测值和实际值的偏差计算梯度动态更新;
为预测算法中指数运算附加项,即时间序列x在i-1时刻的值的c次方;log
cx
i-1为预测算法中对数运算附加项,即以c为底时间序列x在i-1时刻的值的对数;sinx
i-1为预测算法中三角运算附加项,即时间序列x在i-1时刻的值的正弦值。
进一步的,所述步骤(4)中的损失值的计算公式为
参数a和参数b损失梯度的计算公式为:
每次参数a和参数b的更新值的计算公式为η*gradienta和η*gradientb,其中,η为学习率,0<η<1。
进一步的,所述步骤(5)中将压缩器得到的最先保留的值的64位补码和之后的所有预测值和实际值的64位补码的异或操作结果的二进制拼接起来的方法为:
A、最先保留的值的64位补码,直接按顺序拼接;
B、预测值和实际值的64位补码的异或操作结果中,若某个异或操作的值其64位全部为0,说明预测值与真实值相同,则在结果中储存一个“0”位;
C、若经过异或操作以后的值其64位不全为0,说明预测值与真实值不同,则先在字符串里储存一个“1”位,然后计算前置0和后置0的个数,64位当中从左往右第一个不为0的位之前所有0的个数即为前置0的个数,64位当中从右往左第一个不为0的位之后所有0的个数即为后置0的个数;
D、若后一个XOR的值的有效位落在上一个XOR的值的有效位的区间内,即后一个XOR值的前置0和后置0的个数分别至少和上一个XOR值的前置0和后置0一样多,则先在字符串内储存一个单独的“0”位,然后储存有效位的部分;
E、若后一个XOR的值的有效位不落在上一个XOR值的有效位的区间内,即后一个XOR值的前置0比上一个XOR值的前置0的个数少或者后一个XOR值的后置0比上一个XOR值的后置0的个数少,则先在字符串内储存一个单独的“1”位,然后使用6位的无符号编码储存这一个XOR值前置0的个数,然后使用7位的无符号编码储存这一个XOR值的有效位的长度,并将有效位的部分储存在字符串中“1”位之后。
进一步的,所述步骤D中的有效位长度由上一个XOR的有效位长度决定,不是由本身的前置0和后置0的个数决定。
进一步的,所述步骤(6)中调整相应参数的方法为四则运算除法,即将原来的每个参数分别除以对应的代数平均值。
本发明和现有技术相比,产生的有益效果为:
可以根据时间数据本身的特点调整压缩方法,而不局限于一种固定的压缩参数。不断改变的压缩参数可以达到最大化压缩率,在有限的内存和存储空间中处理更大的数据量。
具体实施方式
下面将通过具体实施方式对本发明的技术方案进行清楚、完整地描述。
一种基于时序数据分布特征的自适应无损压缩方法,其创新点在于:包括一个预测器、一个压缩器和一个解压缩器,具体包括以下步骤:
(1)将所有的数据分为多个数据块,每个数据块中的值的数量根据实际预先指定,一般情况下,数据块中的值的数量设定为3600个值,预测器按照数值的时间戳顺序,从开始时间往后,依次读入一个数据块中一串时间序列数据的值;
(2)预测器先根据预测公式所依赖的前置窗口的大小保留对应数量的值放入预测器缓存中用作预测使用,同时,将保留的值直接转换成64位补码的形式依次放入压缩器,所述预测公式由算法预先指定,其中,预测算法包括线性组合、指数、对数和三角运算,所述线性组合、指数、对数和三角运算的算法公式分别为:
其中,x
i为时间序列x在i时刻的值;x
i-1为时间序列x在i-1时刻的值,即i前一时刻的值;x
i-2为时间序列x在i-2时刻的值,即i前两个时刻的值;
为采用预测算法计算出的i时刻的预测值;a、b和c均为可学习的实数,即a、b和c均根据预测值和实际值的偏差计算梯度动态更新;
为预测算法中指数运算附加项,即时间序列x在i-1时刻的值的c次方;log
cx
i-1为预测算法中对数运算附加项,即以c为底时间序列x在i-1时刻的值的对数;sinx
i-1为预测算法中三角运算附加项,即时间序列x在i-1时刻的值的正弦值。
(3)预测器根据缓存中保存的值以及预测公式,得出下一个时间点的预测值,在读入下一个时间点的实际值以后,计算出预测值和实际值的偏差,同时计算出预测值和实际值的二进制补码的异或运算结果,将异或运算结果按顺序放入压缩器;
(4)预测器根据预测值和实际值的偏差,计算出损失值,损失值的计算公式为
参数a和参数b损失梯度的计算公式为:
每次参数a和参数b的更新值的计算公式为η*gradienta和η*gradientb,其中,η为学习率,0<η<1,将每次需要更新的值记录在预测器的缓存中;
(5)当一个数据块的数据全部经过预测器处理后,压缩器中得到最先保留的值的64位补码和之后的所有预测值和实际值的64位补码的异或操作结果均通过压缩器按照以下算法将这些二进制拼接起来:
A、最先保留的值的64位补码,直接按顺序拼接;
B、预测值和实际值的64位补码的异或操作结果中,若某个异或操作的值其64位全部为0,说明预测值与真实值相同,则在结果中储存一个“0”位;
C、若经过异或操作以后的值其64位不全为0,说明预测值与真实值不同,则先在字符串里储存一个“1”位,然后计算前置0和后置0的个数,64位当中从左往右第一个不为0的位之前所有0的个数即为前置0的个数,64位当中从右往左第一个不为0的位之后所有0的个数即为后置0的个数;
D、若后一个XOR的值的有效位落在上一个XOR的值的有效位的区间内,即后一个XOR值的前置0和后置0的个数分别至少和上一个XOR值的前置0和后置0一样多,则先在字符串内储存一个单独的“0”位,然后储存有效位的部分;本步骤中的有效位长度由上一个XOR的有效位长度决定,不是由本身的前置0和后置0的个数决定。
E、若后一个XOR的值的有效位不落在上一个XOR值的有效位的区间内,即后一个XOR值的前置0比上一个XOR值的前置0的个数少或者后一个XOR值的后置0比上一个XOR值的后置0的个数少,则先在字符串内储存一个单独的“1”位,然后使用6位的无符号编码储存这一个XOR值前置0的个数,然后使用7位的无符号编码储存这一个XOR值的有效位的长度,并将有效位的部分储存在字符串中“1”位之后;
(6)将预测器缓存中保存的每次参数需要更新的值并计算其代数平均值,按照四则运算除法的方式调整相应的参数;将调整之前的参数和压缩器中拼接得到的二进制串持久化储存在硬盘中;
(7)预测器继续读入下一个数据块,并使用调整后的参数重复步骤(1)-(6);
(8)需要恢复数据时,解压缩器首先根据当前参数恢复预测公式;根据二进制串的前几个二进制位恢复该数据块的前几个数;根据数据块的前几个数预测下一个数,根据预测值和存储的二进制异或串恢复出真实值。
本发明根据上述的一种基于时序数据分布特征的自适应无损压缩方法,举例描述该算法为:
(1)本实施例需要压缩的数据块的数值依次为为1.0、2.0、3.0、3.0、4.0、2.0、3.0;
(2)设定学习率为0.5,初始预测公式为xt=xt-1+xt-2,(2)将前两个值(1.0、2.0)的二进制补码直接放入压缩器;
(3)第三个值开始,根据预测公式可得预测值依次是3.0、5.0、6.0、7.0、6.0,和实际值相比偏差分别为0.0、2.0、2.0、5.0、3.0;并将预测值与真实值做异或运算,得到五个二进制序列:
0000000000000000000000000000000000000000000000000000000000000000、
0000000000011100000000000000000000000000000000000000000000000000、
0000000000001000000000000000000000000000000000000000000000000000、
0000000000011100000000000000000000000000000000000000000000000000、
0000000000010000000000000000000000000000000000000000000000000000;
(4)根据损失计算公式和损失梯度计算公式计算得到的梯度a为0、3.0、3.0、4.0、2.0,梯度b为0、2.0、3.0、3.0、4.0;根据学习率,得到参数a需更新的值分别为0、1.5、1.5、2.0、1.0,参数b需更新的值分别为0、1.0、1.5、1.5、2.0;并将每次需要更新的值记录在预测器缓存中;
(5)将开头两个值1.0、2.0以及接下来的5个XOR值通过记录前后0的方式进行压缩,得到结果
0011111111110000000000000000000000000000000000000000000000000000010000000000 00000000000000000000000000000000000000000000000000000110010110110010111100101011110010;
(6)将缓存中保存的每次参数需要更新的值计算其代数平均值,得到参数a和b需要调整的量分别为(0+1.5+1.5+2+1)/5=1.2,(0+1+1.5+1.5+2)/5=1.2,a和b分别除以1.2,得到新的a和b分别为0.83333和0.83333(有精度损失);将调整之前的参数(a为1,b为1)和压缩器中拼接得到的二进制串持久化储存在硬盘中;
(7)读入下一个数据块,下一个数据块的预测公式为xt=0.83333xt-1+0.83333xt-2,根据新的预测公式读入下一个数据块,重复步骤(1)-(6);
(8)解压缩时,在硬盘中得到持久化的参数a和b分别为1和1,预测公式即为xt=xt-1+xt-2,在硬盘中还得到持久化的数据
0011111111110000000000000000000000000000000000000000000000000000010000000000 0000000000000000000000000000000000000000000000000000110010110110010111100101011110010,根据前两个64位(0011111111110000000000000000000000000000000000000000000000000000和0100000000000000000000000000000000000000000000000000000000000000)得到原始数据的前两个值为1.0和2.0,根据预测公式xt=xt-1+xt-2,得到第三个值的预测值为3.0,根据编码规则,从持久化的数据中得到预测值和真实值的XOR为0,那么真实值为3.0;根据第三个真实值,得到第四个预测值为5.0,根据编码规则,得到预测值和真实值的XOR有11个前置0,50个后置0,有效位为111,那么得到预测值和真实值的XOR为0000000000011100000000000000000000000000000000000000000000000000,由此真实值为3.0;以此类推,都得到原始数据为1.0、2.0、3.0、3.0、4.0、2.0、3.0。
上面所述的实施例仅仅是本发明的优选实施方式进行描述,并非对本发明的构思和范围进行限定,在不脱离本发明设计构思的前提下,本领域中普通工程技术人员对本发明的技术方案作出的各种变型和改进均应落入本发明的保护范围,本发明的请求保护的技术内容,已经全部记载在技术要求书中。