首页 新闻 会员 周边

【python】机器学习,如何尽量合理创建学习数据?

0
悬赏园豆:20 [已解决问题] 解决于 2019-06-20 17:23

我现在有一组数据,但是数据的量太少了,想尽量合理地增加一些数据。

数据内容                    结果
NUM1 A B C A A B D E F    label1

上面的数据中有重复的内容(比如3个A),我想是否可以把其中一个A删除后变成一个新的数据。

数据内容                   结果
NUM2 B C A A B D E F    label1

大家在建造数据的时候有什么好的经验吗?

芽衣的主页 芽衣 | 菜鸟二级 | 园豆:384
提问于:2019-06-06 14:41
< >
分享
最佳答案
0

对于数据量不够的情况,是有些处理的方式的。第一种,重采样,也就是直接造重复的数据;第二种,除了重采样之外的过采样,也就是造新的数据,造新的数据也不是乱造的,具体有 SMOTE 算法、data augmentation。

但其实我不太理解你的问题,你的 NUM1 和 NUM2 分别指的是一条数据吗?如果是一条数据,你改变了 feature,能否保证 label 不变?如果 NUM1 和 NUM2 是分别是一组数据,那么“把其中一个A删除后变成一个新的数据”也没有必要,因为你重采样也是得到同样的数据。

对于造数据,对训练数据是可以的,但是不要对测试数据进行,测试集要求是真实的数据,这点是需要保证的。

我之前也写了一篇关于处理不平衡数据集的博客 https://www.cnblogs.com/wuliytTaotao/p/9308944.html ,也许有帮助吧。

收获园豆:15
wuliytTaotao | 菜鸟二级 |园豆:205 | 2019-06-06 23:15

你好,谢谢你的热心回答!
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好像只能用于图像和声音,可以用于单纯数据吗?

芽衣 | 园豆:384 (菜鸟二级) | 2019-06-07 18:22

@芽衣: 不能保证label不变,只能假设不变,你说的也没错,SMOTE 也是这么做的,SMOTE也不能保证生成的新的数据 label 也不变。
关于SMOTE,你可以先看看k近邻,搞懂了k近邻,SMOTE也就会了。
SMOTE的实现,你可以看看imbalance-learn这个Python库,有现成的算法,不用自己写。
如果你的数据是结构化的,那data augmentation可能确实处理不了。

wuliytTaotao | 园豆:205 (菜鸟二级) | 2019-06-07 20:39
其他回答(1)
0

你是说搞些测试用的数据?一般可以这样吧,如果你要训练一个函数(已经提前知道了),就随机产生n个样本,然后用这个函数计算出n个结果,再把这个n个结果分别加上一个偏差,最好确保这个n个偏差符合正态分布,python库里有现成的函数可以生成符合正态分布的一组数。 然后你就开始用这些样本训练模型,训练完了和提前设定好的函数做比较就好了。

当然,如果有真实数据更好了

收获园豆:5
会长 | 园豆:12401 (专家六级) | 2019-06-06 15:48

你好,谢谢你的热心回答!
请问你有什么推荐的python的生成符合正态分布的library吗?
我目前找到的是

import numpy as np
np.random.randn(5)
支持(0) 反对(0) 芽衣 | 园豆:384 (菜鸟二级) | 2019-06-07 18:23

@芽衣: 我也是用的这个,别的还不知道呢

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-06-07 22:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册