论文复现:数据归一化和标准化
1.背景介绍:
近期在复现论文JFSSL的结果,Github上有它的Matlab版实现代码,并提供了Wiki数据集和测试代码。该论文实验还包含了NUS-WIDE数据集,但代码中并未提供测试demo。NUS-WIDE数据集包含了大量图片和文本对及其标记信息构成。我并没有使用NUS-WIDE数据集提供的SIFT等手工特征,而是使用Resnet对其进行处理并输出深度特征,文本模态,我使用pca对其进行降维(pca函数来自sklearn)。
2. 遇到的问题
这样的输入进行训练,效果非常差,一看就是没有训练好。我一步步分析发现,由于JFSSL方法中会使用欧式距离计算两个样本特征(图片和图片)之间的相似度,而我的输入计算出欧式距离非常大,这导致了后面的计算出现了问题。
分析过程:我发现NUS-WIDE的特征输入和代码中提供的Wiki数据集demo差异非常大,导致了模型不能正常运行,分析输入特征。
Wiki | NUS-WIDE | |
---|---|---|
文本 | 0~1 | -1.2~2.4 |
图片 | 0~0.7 | 0~16 |
这显然是存在问题的,NUS-WIDE的特征数值范围那么大,才造成了欧氏距离过大,方法不能运行。而文本特征和图片特征之间在量纲上是不同的,这也给训练造成了影响。
3. 解决方案:归一化/标准化
3.1 归一化(Normalization)
我先使用归一化,即将数据映射到0~1之间,这样就和Wiki特征的分布差不多了。
使用min-max归一化,即 x → x − m i n m a x − m i n x \to{\frac{x- min}{max - min}}