当前位置: 首页 > 面试题库 >

如何将数据集划分为类之间的训练和验证集保持率?

松博耘
2023-03-14
问题内容

我有一个多类分类问题,并且我的数据集存在偏差,我有100个特定类的实例,并说10个不同类的实例,所以如果我有100个特定类的实例,我想在各个类之间分配数据集保留率我想让30%的记录进入训练集中,我想让100个记录代表的类有30个实例,而10个记录代表的类有3个实例,依此类推。


问题答案:

您可以StratifiedKFold从在线文档中使用sklearn的:

分层K折交叉验证html" target="_blank">迭代器

提供训练/测试索引以将数据拆分为训练测试集中的数据。

此交叉验证对象是KFold的变体,它返回分层的折痕。折叠是通过保留每个类别的样品百分比来进行的。

>>> from sklearn import cross_validation
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2)
>>> len(skf)
2
>>> print(skf)  
sklearn.cross_validation.StratifiedKFold(labels=[0 0 1 1], n_folds=2,
                                         shuffle=False, random_state=None)
>>> for train_index, test_index in skf:
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [1 3] TEST: [0 2]
TRAIN: [0 2] TEST: [1 3]

这将保留您的类别比率,以便拆分保留类别比率,这对于pandas dfs可以正常工作。

如@Ali_m所建议,您可以使用StratifiedShuffledSplit接受分流比参数:

sss = StratifiedShuffleSplit(y, 3, test_size=0.7, random_state=0)

会产生70%的分割



 类似资料:
  • 问题内容: 将NumPy数组随机分为训练和测试/验证数据集的好方法是什么?与Matlab中的或函数类似。 问题答案: 如果要将数据集分成两半,可以使用,或者需要跟踪索引: 要么 有多种方法可以重复分区同一数据集以进行交叉验证。一种策略是从数据集中重复采样: 最后,sklearn包含几种交叉验证方法(k折,nave -n-out等)。它还包括更高级的“分层抽样”方法,这些方法创建了针对某些功能平衡的

  • 本文向大家介绍python 划分数据集为训练集和测试集的方法,包括了python 划分数据集为训练集和测试集的方法的使用技巧和注意事项,需要的朋友参考一下 sklearn的cross_validation包中含有将数据集按照一定的比例,随机划分为训练集和测试集的函数train_test_split 得到的x_train,y_train(x_test,y_test)的index对应的是x,y中被抽取

  • 问题内容: 我有一个很大的数据集,想将其分为训练(50%)和测试集(50%)。 假设我有100个示例存储了输入文件,每一行包含一个示例。我需要选择50条线作为训练集和50条线测试集。 我的想法是首先生成一个长度为100(值范围从1到100)的随机列表,然后将前50个元素用作50个训练示例的行号。与测试集相同。 这可以在Matlab中轻松实现 但是如何在Python中完成此功能?我是Python的新

  • 我刚刚开始使用R,我不确定如何将我的数据集与以下示例代码结合起来: 我有一个数据集,我需要将其放入训练(75%)和测试(25%)集中。我不确定应该将哪些信息放入x和大小?x是数据集文件吗?我有多少样本?

  • 问题内容: 我正在尝试运行以下Colab项目,但是当我想将训练数据分为验证和训练部分时,出现此错误: 我使用以下代码: 如何解决此错误? 问题答案: 根据Tensorflow Dataset docs ,百分比拆分是可能的,例如 如示例所示,更改列表时,您的代码将起作用: 使用上面的代码,有2590个条目,而有1080个。

  • 我有一个数据集,从数据库查询中获得,大约有5,000个元素。我想把这些数据分成块,然后让“用户”(线程)发出HTTP请求。 这样做的目的是我们有一个站点,提供实时信息的瞬态数据,我想模拟多个并发的请求对服务。 1-尝试创建一个测试计划,在该测试计划中完成DB查询,然后通过ForEach控制器通过HTTP请求进行处理。但是,当我只有1个'user'时,这工作很好;如果我将用户计数增加到2+,那么DB