来自不平衡数据的分层平衡采样(机器学习)[重复]
Posted
技术标签:
【中文标题】来自不平衡数据的分层平衡采样(机器学习)[重复]【英文标题】:Stratified balanced sampling from unbalanced data (Machine learning) [duplicate] 【发布时间】:2018-03-02 14:46:03 【问题描述】:我很抱歉我的粗心大意。如果您需要平衡二次采样的方法,请访问以下链接。有各种各样的答案。
Scikit-learn balanced subsampling
如何从不平衡数据中进行分层平衡抽样?
我需要解决 40 个类的分类问题。数据是从 13 个传感器实时收集的,包括 13 列(传感器数量)乘 368816 行(简单来说,就像一个时间段)。我打算把数据放到循环神经网络中。
所以,我将其标记为 0 到 40 级。数据属于0类表示进程的正常状态,其他表示异常状态和产生问题的地方。
数据由 13 列 x 368816 行组成。每行表示每个数据集。 368816 个数据集中的每一个都属于 0 到 40 类。但是,它是不平衡的。属于 0 类的数据集数量为 103260,约占整个数据集的 22%。
其他类的数据个数,1-40,差不多。
我想从不平衡的数据中制作平衡的样本数据。例如,如果最小的类有 7000 个数据,我想采样 7000*41(nb of class) 数据。
我尝试在 scikit-learn 包中使用 StratifiedShuffleSplit 方法。脚本如下。
data=StratifiedShuffleSplit(n_splits=1, test_size=0.3, random_state=99)
data.get_n_splits(x_data,dummy_y) #dummy_y means one-hot encoded y
for train_index, test_index in data.split(x_data,dummy_y):
x_train,x_test=x_data[train_index], x_data[test_index]
y_train,y_test=dummy_y[train_index], dummy_y[test_index]
print("nb of train data:", len(y_train), "nb of test data:", len(y_test))
如果我的采样逻辑是正确的,nb_train 和 nb_test 的总和应该小于 368816。因为我对不平衡数据进行了平衡采样。
但是 nb_train 是 258171 而 nb_test 是 110645。
如何从不平衡数据中进行分层平衡抽样?
我尝试了Stratified Train/Test-split in scikit-learn 方法。但是,我失败了。我使用的脚本如下。
x_train,x_test,y_train,y_test=train_test_split(x_data,dummy_y,stratify=y,random_state=99,test_size=0.3)
【问题讨论】:
你的数据在哪个数据结构中? 我有 13 列乘以 431116 行的数据。每行表示一个数据集。它是二维矩阵数据。每个数据集都与每个类别标签相关联。 所以你基本上是想拆分不平衡的数据吧? 如果您将StratifiedShuffleSplit 与n_splits=1
一起使用会怎样?它会起作用吗?
我尝试使用 Vivek Kumar 推荐的方法,但在版本中不起作用。 0.18。当我使用脚本“x_train,x_test,y_train,y_test=train_test_split(x_data,y_encoded,stratify=y,random_state=99,test_size=0.3)”时,它会打印出一些错误消息,例如“TypeError:'bool'类型的对象没有 len()"。
【参考方案1】:
您需要按照评论中的建议进行StratifiedShuffleSplit,并且您不需要对其使用交叉验证。
如this 回答中所建议的那样
但是,如果一个类在数据集中没有多少代表,这可能是 数据集中的情况,因为您计划对少数人进行过采样 类,然后分层抽样可能会产生不同的目标类 训练和测试集中的分布比随机抽样可能 产量。
他还给出了Stratified Cross Validation 和stratified sampling之间的一些区别
希望这会有所帮助
【讨论】:
以上是关于来自不平衡数据的分层平衡采样(机器学习)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
数据不平衡不平衡采样调整分类阈值过采样欠采样SMOTEEasyEnsemble加入数据平衡的流程代价敏感学习BalanceCascade
python使用imbalanced-learn的RepeatedEditedNearestNeighbours方法进行下采样处理数据不平衡问题