对于数据量不够的情况,是有些处理的方式的。第一种,重采样,也就是直接造重复的数据;第二种,除了重采样之外的过采样,也就是造新的数据,造新的数据也不是乱造的,具体有 SMOTE 算法、data augmentation。
但其实我不太理解你的问题,你的 NUM1 和 NUM2 分别指的是一条数据吗?如果是一条数据,你改变了 feature,能否保证 label 不变?如果 NUM1 和 NUM2 是分别是一组数据,那么“把其中一个A删除后变成一个新的数据”也没有必要,因为你重采样也是得到同样的数据。
对于造数据,对训练数据是可以的,但是不要对测试数据进行,测试集要求是真实的数据,这点是需要保证的。
我之前也写了一篇关于处理不平衡数据集的博客 https://www.cnblogs.com/wuliytTaotao/p/9308944.html ,也许有帮助吧。
你好,谢谢你的热心回答!
NUM1 和 NUM2 分别指的是一条数据,不能保证label不变,只能假设它不会变了。
我查询了一下SMOTE算法和data augmentation,SMOTE的代码看不太懂,哪里有简单易懂或者注释多一点的代码吗?或者你可以帮我写一个简易代码用['A','B','C','A','A','B','D','E','F']和['B','C','E','A','B','D','E','F']创建一个新的数据?
data augmentation好像只能用于图像和声音,可以用于单纯数据吗?
@芽衣: 不能保证label不变,只能假设不变,你说的也没错,SMOTE 也是这么做的,SMOTE也不能保证生成的新的数据 label 也不变。
关于SMOTE,你可以先看看k近邻,搞懂了k近邻,SMOTE也就会了。
SMOTE的实现,你可以看看imbalance-learn这个Python库,有现成的算法,不用自己写。
如果你的数据是结构化的,那data augmentation可能确实处理不了。
你是说搞些测试用的数据?一般可以这样吧,如果你要训练一个函数(已经提前知道了),就随机产生n个样本,然后用这个函数计算出n个结果,再把这个n个结果分别加上一个偏差,最好确保这个n个偏差符合正态分布,python库里有现成的函数可以生成符合正态分布的一组数。 然后你就开始用这些样本训练模型,训练完了和提前设定好的函数做比较就好了。
当然,如果有真实数据更好了
你好,谢谢你的热心回答!
请问你有什么推荐的python的生成符合正态分布的library吗?
我目前找到的是
import numpy as np
np.random.randn(5)
@芽衣: 我也是用的这个,别的还不知道呢