случайная выборка из двух многомерных массивов 100X100, с одинаковым номером строкив питоне NumPy - PullRequest
0 голосов
/ 09 октября 2018

У меня есть два многомерных массива (матрицы) в numpy, один из которых является обучающим набором (измерение 100,100), а другой - меткой класса (измерение 100X1). Я хочу взять случайные выборки, используя np.random.choice, но не знаюкак выяснить, взяв ту же строку нет.из обеих матриц.

, например,

k=np.random.choice(10,replace=False)
temp_data=data.ix[k]
temp_datat=datat.ix[k]

будет ли это работать для выборки 10 одинаковых случайных строк из данных моих массивов и данных?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Другой подход к тому, что было предложено @Umang Gupta, и может быть полезным, если вы также хотите отслеживать тех, кто не выбран

# Suppose X_train is your 100 x 100 dataset
# and y_train is your array of labels
idx = np.arange(len(X_train))
np.shuffle(idx)

NUM_SAMPLES = 50
sampled_idxs = idx[:NUM_SAMPLES]
rest_idxs = idx[NUM_SAMPLES:]

X_samples = X_train[sampled_idxs]
X_rest = X_train[rest_idxs]
y_samples = y_train[sampled_idxs]
y_rest = y_train[rest_idxs]

Если у вас уже установлен Scikit-Learn, вы можете использовать test_train_split

from sklearn.model_selection import test_train_split
X_samples, X_rest, y_samples, y_rest = train_test_split(X_train, y_train,
                                                        train_size=NUM_SAMPLES,
                                                        random_state=123)
0 голосов
/ 09 октября 2018

Вы можете использовать удивительный numpy.random.randint() для достижения этой цели.Полный рабочий пример выглядит следующим образом:

# toy data
In [29]: train_set = np.random.random_sample((100, 100))

# of course, class labels have to be discrete :)
In [30]: class_label = np.random.random_sample((100, 1))

# number of samples that need to be picked (a.k.a batch_size)
In [31]: num_samples = 5

# generate sample indices in the range of 100
In [32]: sample_idxs = np.unique(np.random.randint(train_set.shape[0], size=num_samples))

In [33]: sample_idxs
Out[33]: array([24, 30, 37, 73, 74])

# index into the array to get the actual entries
In [34]: (train_set[sample_idxs]).shape
Out[34]: (5, 100)

# index into the class_label array to get the corresponding label entries    
In [35]: (class_label[sample_idxs]).shape
Out[35]: (5, 1)

Хотя может быть одно предупреждение.Вы можете не выбирать весь набор данных даже после нескольких прогонов.Кроме того, возможно, что один и тот же пример может быть использован более чем в одном тренировочном заезде.

0 голосов
/ 09 октября 2018

Вы можете сгенерировать случайный выбор и выбрать одну и ту же строку?

Что-то вроде

k = np.random.choice(100, 10, replace=True)
row1 = arr1[k]
row2 = arr2[k]

Это будет работать для 10 строк.Первый аргумент - число для выбора (0-99, включительно), а второй - количество элементов для выбора.

...