compress

简介

compress 是用于处理平衡数据和数据压缩的 Python 第三方库。

原理介绍

背景

数据的多样性对于一个学习器效果往往有很大的影响。

而实际上在一份数据集中存在着重复数据,这部分数据不仅没有增强学习器效果,反而降低了学习器性能。

因此,很有必要处理这部分数据。

思想

算法思想在于确定非平稳割点

非平稳点

若数据集 $D={ (x_1, y_1), (x_2, y_2), …, (x_n, y_n) }$ 存在 $d$ 个属性 $x_{i}={ x_{i1}; x_{i2};…; x _{id} }$。

对 $D$ 按照某一属性排序,两相邻不同 $y$ 值的 $x$ 即为非平稳点。

算法示例

若存在数据集 $S$ 大小为 $(9, 3)$,前两列 $A_1, A_2$ 为数据属性,最后一列 $Class$ 为标签

首先按照 $A_1$ 对数据 $S$ 排序。

这里只显示 $A_1, Class$ 排序结果

存在两组非平稳割点,如下。

对 $S$ 初始位置进行标记,非平稳点标记为1,平稳点标记为0,获取指标向量 $I_{A_1}$。

对 $A_2$ 进行相同处理可以获得指标向量 $I_{A_2}$。

结合 $I_{A_1}$ 与 $I_{A_2}$ 可获得指标矩阵 $I$。

对 $I$ 按行求和获得指标向量 $K$

选定阈值 $k$ 根据 $K<k$ 对数据集 $S$ 进行过滤。

若,$k=0$ 则

数据压缩比为 $9:7$

一些思考

非平稳点与决策树的结点类似。

两者同样是寻找临界值,根据临界值进行依次划分。

由此可见,临界值蕴含的信息往往比非临界值蕴含的信息

依赖

  • numpy

安装

虽然没有提供 pip 方式安装,但提供 setup.py 安装方式。

所以,首先需要将 compress 下载下来。

下面给出使用 git 工具下载示例。

>>> git clone https://github.com/Zeroto521/compress.git

然后,切换到项目根目录下,使用 setup.py 进行安装。

>>> cd compress
>>> python setup.py install

当然,您也可以不通过 setup.py 方式安装,直接复制脚本当您所需要的地方。

实例

>>> from compress import Compression  # 导入库
>>> model = Compression(data, labels)  # 这里假设存在数据 `data` 大小为 `(n, m)`, 对应的数据标签 `labels` 大小为 `(n, 1)`
>>> model.fit()  # 使用 `fit()` 方法学习数据的不平衡特征
>>> data_new = model.compress(k=0)  # 然后 `compress()` 方法进行压缩数据。`k` 默认为 `1`。
>>> data_new  # 显示压缩后的数据

更多细节请查看项目示例源代码

项目主页

https://github.com/Zeroto521/compress

他话

话说,如果可以的话,看看项目的 commit 或许看到 compress 是如何成长的。

参考文献