Объедините данные нескольких файлов с одним номером в один - PullRequest
0 голосов
/ 07 октября 2019

У меня есть список, который содержит 6 различных поднаборов набора данных. Я хотел бы выполнить 6-кратную перекрестную проверку. Поэтому в цикле for, состоящем из 6 шагов, каждый раз делить мой набор данных на 2 группы (тренировка, которая будет содержать 5 наборов вспомогательных данных и набор тестов - содержит один набор вспомогательных данных). Мой код выглядит следующим образом:

РЕДАКТИРОВАТЬ (с учетом комментариев):

sets = ['datasets/1.pickle', 'datasets/2.pickle', ..., 'datasets/6.pickle']
for i in range(0,7):
  train_set = sets[:i]+sets[i+1:]
  test_data, test_lbls = crossValidFiles(sets[i]) # returns the data for a specific sub-samlpe, returns two numpy arrays.
  for item in train_set:
      train_set = [(train_data, train_lbls) for crossValidFiles(item) in train_set]
      train_data = np.concatenate([a for (a,b) in train_set], axis = 0)
      train_lbls = np.concatenate([b for (a,b) in train_set], axis = 0)
      #train_data, train_lbls = crossValidFiles(item) # that returns one file at time.

Как объединить файлы, которые я возвращаю для обучающего набора?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

В качестве альтернативы ответа Мейсона , вы можете использовать np.concatenate внутри вашей функции crossValidFiles, чтобы любой код там выполнялся для агрегированных тестовых данных.

import numpy as np

def crossValidFiles(input_file):
    data, labels = some_load_function(input_file)
    return data, labels

def some_load_function(input_file):
    # Check if the input file is a string or list-like
    if isinstance(input_file, str):
        train_array = some_load_function_2(input_file)
    else:
        train_array = np.concatenate([some_load_function_2(f) for f in input_file], axis=0)

    # rest of your code to create variables 'data' and 'labels'
    return data, labels


Link .

1 голос
/ 07 октября 2019

вы можете использовать np.concatenate(): np concatenate

например,

import numpy as np
t1 = np.array([[1,2,3],[4,5,6]])
t2 = np.array([[7,8,9],[10,11,12]])
train array = np.concatenate((t1,t2), axis=0)

для обработки ваших файлов. Я бы извлек train_data и train_lbls дляваши данные, а затем просто составьте список каждого. например:

import numpy as np
t1 = [np.array([[1,2,3],[4,5,6]]), np.array(['train_lbls'])]
t2 = [np.array([[7,8,9],[10,11,12]]), np.array(['train_lbls'])]
train_set = [t1,t2]
train_set = [(train_data, train_lbls) for crossValidFiles(item) in train_set]
train_data = np.concatenate([a for (a,b) in train_set], axis=0)
train_lbls = np.concatenate([b for (a,b) in train_set], axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...