一、写在前面
安全半监督学习(S3L)是目前较为新的一个领域,Python 中有两种第三方库(很大程度上)实现了S3L的一些算法:s3l 和 safeu ,均为同一作者开发(两个包的内容似乎一模一样,只有名字不一样)。前者在PyPI上已经搜不到了,所以本文将聚焦于后者的安装使用。
SafeU链接:https://pypi.org/project/safeu/(版本0.1.0)
可能会有读者疑惑,安装一个第三方库不是有手就行吗?这还需要单独写一篇文章来讲解?
这是因为,SafeU所依托的一些包太过陈旧(开发者已经两年多没有维护了),最新的包又不兼容SafeU,如果强行去折腾版本问题最后可能竹篮打水一场空。所以目前来说,最佳方案是安装最新版本的依赖包,然后魔改源码。
二、SafeU的安装
强烈建议用 conda 创建一个新的环境。
在命令行中按顺序依次执行以下命令:
conda create -n s3l python numpy scipy pandas scikit-learn h5py
conda activate s3l
pip install safeu
三、魔改源码
首先进入 ...\envs\s3l\Lib\site-packages\safeu 目录下,准备开始魔改源码。
3.1 Experiments.py 的修改
因为 sklearn.externals.joblib 已经弃用,所将第 10 行改为
from joblib import Parallel, delayed
3.2 datasets\base.py 的修改
pandas 的 DataFrame 数据结构转换出现问题,将第 332 行改为
X = pd.read_csv(f, delimiter=',', low_memory=False).to_numpy()
将第 338 行改为
y = pd.read_csv(f, delimiter=',', low_memory=False).to_numpy()
3.3 classification\LPA.py 的修改
该文件对应的是标签传播算法,其中使用的 sklearn 的一些API已经过时。
将第 2 行改为
from sklearn.semi_supervised import LabelPropagation
第 124 行改为
model = LabelPropagation(kernel=self.kernel,
第 128 行没有 ravel ,需要改为
model.fit(instance, labels.ravel())
四、降低版本以兼容
如果不想魔改源码可以看这一章节(注意三和四是独立的)。
在命令行按顺序依次执行以下命令
conda create -n s3l python=3.7
conda activate s3l
pip install numpy==1.15.1 scipy==1.1.0 pandas==0.24 scikit-learn==0.19.2 h5py
pip install safeu
五、写在最后
SafeU 的开发者太久没维护了,不建议使用。
|