对不起我很抱歉。如果您需要平衡子采样的方法,请访问以下链接。有各种答案。
Scikit-learn balanced subsampling
如何从不平衡数据中进行分层平衡采样?
我需要解决40个班级的分类问题。数据实时从13个传感器收集,其中包括13列(传感器数量)368816行(简单地说,就像一个时间段)。我计划将数据放入Recurrent Neural Network。
所以,我把它标记为0到40级。数据属于0类意味着正常的进程状态,其他意味着异常状态和产生问题的地方。
数据由13列乘368816行组成。每行表示每个数据集。 368816数据集中的每一个都属于0到40类。但是,它是不平衡的。数据集属于0类的数量是103260,约占整个数据集的22%。
属于其他类的数据,1-40,类似。
我想从不平衡数据中获取平衡的样本数据。例如,如果最小的类有7000个数据,我想抽样7000 * 41(nb类)数据。
我尝试在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)
答案 0 :(得分:0)
您需要在评论中建议StratifiedShuffleSplit,并且您不需要对其进行交叉验证。
作为this 回答中的建议
但是如果一个类在数据集中没有多少表示,那么可能是 数据集中的情况,因为您计划对少数群体进行过采样 然后,分层抽样可以产生不同的目标类别 在列车和测试集中的分布比随机抽样可能 产率。
他还在Stratified Cross Validation 和stratified sampling
之间给出了一些区别希望这会有所帮助