如何将大型数据集划分为n个子集,以维持类别比例

时间:2019-04-20 04:32:09

标签: python machine-learning scikit-learn classification svm

我正在处理二进制分类问题,并且我使用的是大型数据集(样本数量很多,功能没有那么多)。数据不平衡,但是我正在使用权重数组来解决此问题(有点)。

我一直在尝试使用sklearn进行分类的一个小版本,显然SVM可以很好地满足我的需求。但是,一旦我尝试将SVM放入整个数据集中,它将花费很长时间(而且我也用光了内存)。

我想知道的是,Sklearn中是否有任何快速的方法来划分该集合,比如说可以将其分成10个子集,并保持类的比例,那么我可以再将每个子集划分为训练/测试并拟合每个子集都独立支持SVM(这样我也可以使用不同的处理器)?

2 个答案:

答案 0 :(得分:1)

您可以使用new column从0到1添加一个random number,它将是np.random.random_sample,然后您可以group by class并应用{ {1}}到生成的随机数,例如创建新列pd.cut

dataset

答案 1 :(得分:1)

StratifiedKFold功能可以满足您的要求。它将数据分成k个分层的折叠。叫_iter_test_masks()_make_test_folds()

基于documentation

>>> from sklearn.model_selection import StratifiedKFold
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> skf = StratifiedKFold(n_splits=2, shuffle=True)
>>> for i in skf._iter_test_masks(X, y):
...     print(i)

[ True False False  True]
[False  True  True False]

>>> for i in skf._make_test_folds(X, y):
...     print(i)

1
0
0
1