我正在处理二进制分类问题,并且我使用的是大型数据集(样本数量很多,功能没有那么多)。数据不平衡,但是我正在使用权重数组来解决此问题(有点)。
我一直在尝试使用sklearn进行分类的一个小版本,显然SVM可以很好地满足我的需求。但是,一旦我尝试将SVM放入整个数据集中,它将花费很长时间(而且我也用光了内存)。
我想知道的是,Sklearn中是否有任何快速的方法来划分该集合,比如说可以将其分成10个子集,并保持类的比例,那么我可以再将每个子集划分为训练/测试并拟合每个子集都独立支持SVM(这样我也可以使用不同的处理器)?
答案 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()
,
>>> 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