五大压缩思想

压缩的定义

    压缩的官方定义为:一种通过特定的算法来减小计算机文件大小的机制。这种机制是一种很方便的发明,尤其是对网络用户,因为它可以减小文件的字节总数,使文件能够通过较慢的互联网连接实现更快传输,此外还可以减少文件的磁盘占用空间。

    简单来说,压缩实质是对冗余信息的一种简化表示。由于当前数据可以用一种更简洁的方式表示,进而用更小的存储空间即可存储,因此才有了压缩的存在。

五大压缩思想

1、重复性压缩

    以游程编码为例,游程编码的思想为:相邻元素越相近,重复性越大,越可以通过单个元素和出现次数进行压缩表示。

    例如:aaaaccccccdddddddd    由于存在较多的重复元素,因此可以简化表示为:4a6c8d,原来是18个字符,简化后变成了6个字符。

2、统计性压缩

    以哈夫曼编码为例,哈夫曼编码的思想为:出现频率越大的,用越少的字符进行编码。例如:aaaaaaaaaaaaaaaaaaaabbbbbbbbbbcccc,该字符串中有20个a,10个b和4个c,

    首先需要说明的是在计算机中存储数据时,是以二进制的方式进行存储,每个字符一般用8个二进制来表示,即每个a被编码为8个0和1的一串数字,b、c同样。

    采用这种压缩思想,a频率最大,则编码为较少的二进制,例如:00;b频率次之,编码为001,c频率最小,编码位数较多,编码为0001,进而在整体上达到压缩的效果,这里的编码值只是用于说明压缩思想。

    哈夫曼具体的编码过程就不讲了,今天主要是压缩原理的分析,哈夫曼编码的实现过程可以参考下面这个博客:

    哈夫曼编码---一种无损数据压缩算法_哈夫曼压缩算法-CSDN博客

    算数编码也是相近的压缩思想。

3、表示性压缩

    以LZ77编码为例,编码思想为:通过窗口内字符对后面的字符进行尽可能多的表示。

    通过三元组(偏移距离、匹配长度、下一个字符)来进行表示,进而将原始数据编码为多个三元组,同时可以根据得到的三元组,进行解码,得到原始数据。

    LZ77算法在上一篇博客中讲过了,因此这里不再赘述。

    LZ77编码参考链接:LZ77压缩算法-CSDN博客

4、转化性压缩

    即将不规律的数据,通过某种操作转化为有规律的数据。

    例如1:STL和EMD,通过分解,得到有规律的数据,进行压缩。

    STL分解即将原始曲线分解为:趋势项、周期项和残差项,每个项是与原始曲线相同长度的曲线。

    趋势项可以表示原始曲线的趋势信息,例如:原始曲线为第二个季度的销售信息,则趋势项可以表示第二个季度的销售的整体情况,是上升,波动还是下降等。

    周期项可以表示原始曲线的规律性的信息,例如:原始曲线为西安市的10年的气温变化曲线,则周期项可以表示10年的气温变化中相近的变化波动,如:夏季温度总是高于春季,每年往往只有两种温度分布,俗称:春秋在战国,不在西安。

    STL分解可参考链接:时间序列分解STL算法详解_stl时序分解-CSDN博客 

    主要是里面的图较为直观,方便理解。

    EMD分解可参考链接:1.EMD(经验模态分解) - 哔哩哔哩

    这个链接也是,有图,方便理解。

    例如2:自编码网络,通过一种转换规则,即神经网络作为数据映射规则,进行压缩

    自编码网络是一种较为特殊的神经网络,输入和输出相同,通过神经网络的网络结构来学习同类数据的特征,分为编码层和解码层,编码层用于学习特征,解码层的输出与编码层的输出比较,相近就说明学习的比较好,即该自编码网络有较好性能。

    其中我们利用的是编码和解码层的数据,由于编码层和解码层的抽象数据表示的占用空间少,进而达到压缩的目的,但要将压缩数据还原回去,必须要通过对应的自编码网络才能实现。

                                          

                                                                    自编码网络简示图

    如图所示,编码层的每一层的节点数据都可以作为压缩数据,与原始数据相比,数据量明显减少。

    例如3:BWT和MTF通过字符顺序的转换,得到有规律的数据,同时转换顺序保留,继续压缩。

    BWT的目标是把相同字符排列到一块,从而有助于后面的压缩

    实现方式为:通过将字符串的所有旋转排列进行排序,然后取每一排列的最后一列,从而实现数据的重新排列,使得相同字符聚集在一起,从而提升压缩效率。

    BWT参考链接:BWT压缩-CSDN博客

    MTF的目标是将最近使用的字符移动到前面,因为最近使用的字符大概率会在之后出现,从而后面的数据和字典数据相近,进而使得频繁出现的字符有更小的索引值,从而在编码后的数据中更加接近。

    MTF相较于BWT可以达到的一个效果是:MTF更能够使得编码后的数据接近字典中的字符排列顺序,因此可以利用这个特点,通过设置字典中字符顺序,进而达到提高MTF的排序效果,便于后续压缩。

    实现方式为:通过维护一个字符列表,并将每个扫描到的字符移动到列表的前面,从而减少最近使用字符的索引值。这样,对于许多连续的、相同的字符,将被替换为多个0;最近使用过的字符,会被小的index替换;最近很久没有使用过的字符,会被较大的index替换。

    MTF参考链接:MTF压缩-CSDN博客

    例如4:RPCA,将矩阵分解为稀疏和低秩矩阵的加和

这个图是下面这个参考博客上的图,较为直观,从左到右,分别成为:左图、中图和右图

    左图为原始数据矩阵,通过RPCA分解得到中图低秩矩阵和右图稀疏矩阵,中图低秩矩阵的不同行相似性较大,可以较好压缩,右图稀疏矩阵,即矩阵中很多0,只需标记非0数据存储即可,存储空间较少,即将一个原本复杂的数据,分解为一种规律性较强和一种数据量较少的两种数据,进而达到压缩效果。

    RPCA参考链接:RPCA 稳健主成分分析/鲁棒主成分分析-CSDN博客

    例如5:K-SVD,将矩阵分解为字典矩阵和稀疏矩阵

    

    这个图是下面这个参考博客上的图,Y=D*X,D为字典矩阵,X为稀疏矩阵

   Y           =            D           *           X

 [M,N]                  [M,n]                   [n,N]

    上面公式中, [M,N] 为矩阵Y的大小,[M,n] 为字典矩阵D的大小,X为稀疏矩阵X的大小,要想达到压缩目的,只需设置参数使得    M*n+n*N<M*N,例如:当M=10,N=8,n=3时,Y中元素数量为80,D中元素数量为30,X中元素数量为24,压缩后字典矩阵和稀疏矩阵中元素数量为54,远小于原始矩阵中元素数量,从而达到了压缩目的。

    K-SVD的分解过程,可以简单理解为:Y是一篇英文文章,D是26个字母表,X是文章中单词对应的字母的不同组合方式。

    K-SVD参考链接: K-SVD_k-svd 并不直接对 ek 进行 svd 分解-CSDN博客

5、降维

    降维达到数据量减少的方法可以分为两种:

    一种是维度减少,例如:原来的数据是100维,降维后数据变成了20维。

    另一种是样本数量减少,例如:原来的数据是100个数据,每个数据10维,降维后变成了50个10维的数据。

    降维方法有:

    例如1:主成分分析PCA:

    通过正交变换将一组可能线性相关的变量转换为一组线性不相关的变量,这些新变量称为主成分。

    

    如图所示,如果数据分布为上图的椭圆状,则长轴为最大主成分方向,即数据在该方向的投影长度最长,可以最大程度表示这些数据的分布。保留几个主要变化方向,即方差大的方向,忽略防擦好小的方向,认为方差小的方向含有较大噪声。

    PCA降维后,数据量减少,达到压缩效果。

    PCA参考链接:主成分分析(PCA)-CSDN博客

    例如2:典型相关分析CCA:

    通过找出两组变量最相关的部分,将原始多维数据降到低维空间。

    每组变量分别通过该组内变量的线性组合得到一个或几个综合表示该组变量的新变量,根据新变量的相关性来定义原来两组变量的相关性。

    CCA参考链接:https://zhuanlan.zhihu.com/p/670120496

    例如3:流形学习:

    流形学习假设所处理的数据点分布在嵌入于外维欧式空间的一个潜在的流形体上,或者说这些数据点可以构成这样一个潜在的流形体。

    流形学习算法很多,如:ISOMAP、LLE等。

    流形学习参考链接:https://zhuanlan.zhihu.com/p/566088096

    例如4:t-SNE:

  t-SNE本质是一种嵌入模型,能够将高维空间中的数据映射到低维空间中,并保留数据集的局部特性,通过映射后数据的可分性来判定原始的高维复杂的数据是否可分,这里的可分不是指一条线或一个平面的那种可分,是一种区分程度。

 t-SNE参考链接:通俗理解一个常用的降维算法(t-SNE)-腾讯云开发者社区-腾讯云

    例如5:稀疏样本自表达子空间聚类:

    每个子空间只是一部分点,即观测到了高维数据的一部分形状,因此达到降维效果。

    这种方法利用了数据的自表达属性,即数据点可以用其他数据点的线性组合表示,然后通过谱聚类技术将数据点分组到各自的子空间中。

    子空间聚类参考链接:     稀疏样本自表达子空间聚类算法-《智能系统学报》     

     以上只是个人理解,有不同意见的欢迎一块讨论交流,互促成长!!!

    

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值