分层样本,在python中替换

时间:2018-10-05 22:50:37

标签: python random sample sklearn-pandas

我有一只熊猫schemaFormValidate。我正在尝试创建一个带有替换的示例<template> <div class="container"> <div v-for="n in 3" :key="n">{{n}}</div> <div v-for="n in arr" :key="n">{{n}}</div> </div> </template> <script> export default { name: 'MyComponent', data () { return { arr: ['A', 'B', 'C'] } } } <style scoped> .container div{ border: 1px solid black; } </style> 并对其进行分层。

这使我可以替换:

DataFrame

但是,我不确定如何进行分层。我可以使用DataFrame参数吗?我要分层的列是字符串。

这使我可以分层:

df_test = df.sample(n=100, replace=True, random_state=42, axis=0)

但是,没有替代的选择。

我如何进行分层和替换?

2 个答案:

答案 0 :(得分:2)

这是一个古老的问题,但是由于google在寻找同一件事时首先将其返回给我,因此我认为将其留给所有人,包括我未来的自我,将很有用。

显然sklearnsklearn.utils.resample中提供了此功能:

from sklearn import datasets
from sklearn.utils import resample

X, y = datasets.load_iris(return_X_y=True)
X_new, y_new = resample(X, y, stratify=y)

您可以使用n_samples参数控制样本量。默认情况下,它设置为None,因此您将获得X.shape[0]个随机样本并进行替换(因为这是为引导而设计的)。希望这对某人有帮助。

答案 1 :(得分:0)

据我所知,sklearn中的默认StratifiedShuffleSplit将替换运行,即非互斥策略。希望我能正确理解你。

import numpy as np
from sklearn.model_selection import StratifiedShuffleSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 0, 1, 1, 1])
sss = StratifiedShuffleSplit(n_splits=5, test_size=0.5, random_state=0)
sss.get_n_splits(X, y)

print(sss)       

for train_index, test_index in sss.split(X, y):
   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: [5 2 3] TEST: [4 1 0]
TRAIN: [5 1 4] TEST: [0 2 3]
TRAIN: [5 0 2] TEST: [4 3 1]
TRAIN: [4 1 0] TEST: [2 3 5]
TRAIN: [0 5 1] TEST: [3 4 2]