Вы также можете рассмотреть разделенное разбиение на набор для обучения и тестирования. Начальное подразделение также генерирует тренировку и тестирование, установленное случайным образом, но таким образом, что сохраняются исходные пропорции классов. Это делает тренировочные и тестовые наборы лучше отражать свойства исходного набора данных.
import numpy as np
def get_train_test_inds(y,train_proportion=0.7):
'''Generates indices, making random stratified split into training set and testing sets
with proportions train_proportion and (1-train_proportion) of initial sample.
y is any iterable indicating classes of each observation in the sample.
Initial proportions of classes inside training and
testing sets are preserved (stratified sampling).
'''
y=np.array(y)
train_inds = np.zeros(len(y),dtype=bool)
test_inds = np.zeros(len(y),dtype=bool)
values = np.unique(y)
for value in values:
value_inds = np.nonzero(y==value)[0]
np.random.shuffle(value_inds)
n = int(train_proportion*len(value_inds))
train_inds[value_inds[:n]]=True
test_inds[value_inds[n:]]=True
return train_inds,test_inds
df [train_inds] и df [test_inds] предоставляют вам набор для обучения и тестирования вашего исходного DataFrame df.