【发布时间】:2015-09-23 03:23:31
【问题描述】:
我正在尝试分类一些相当不平衡的数据。 但是,它的分类相当好。
为了准确评估效果,我必须将数据分成训练和测试子集。
现在我正在通过以下非常简单的措施来做到这一点:
import numpy as np
corpus = pandas.DataFrame(..., columns=["data","label"]) # My data, simplified
train_index = np.random.rand(len(corpus))>0.2
training_data = corpus[train_index]
test_data = corpus[np.logical_not(train_index)]
这很好也很简单,但是有些类很少出现: 在超过 50,000 个案例的语料库中,大约有 15 个每个出现不到 100 次,其中两个每个只出现一次。
我想将我的数据语料库划分为测试和训练子集,这样:
- 如果一个类出现的次数少于两次,则将其排除在两次之外
- 每个课程至少出现一次,在测试和训练中
- 测试和训练的划分是随机的
我可以拼凑一些东西来做到这一点, (可能最简单的方法是删除出现次数少于 2 的东西),然后重新采样直到唾液在每一侧都有),但我想知道是否已经存在一种干净的方法。
我不认为sklearn.cross_validation.train_test_split 可以做到这一点,但它的存在表明 sklearn 可能具有这种功能。
【问题讨论】:
标签: python pandas machine-learning scikit-learn classification