как разбить наборы данных на тренировочные и тестовые данные с помощью sklearn

Вы не можете передать простой примитив по ссылке в Python, но вы можете делать такие вещи, как:

def foo(y):
  y[0] = y[0]**2

x = [5]
foo(x)
print x[0]  # prints 25

. Это странный способ обойти это. Обратите внимание, что в Python вы также можете вернуть более одного значения, что делает некоторые из вариантов использования для передачи по ссылке менее важными:

def foo(x, y):
   return x**2, y**2

a = 1
b = 2
a, b = foo(a, b)  # a == 2; b == 4

Когда вы возвращаете такие значения, они возвращаются как Кортеж, который, в свою очередь, распакован.

edit: Другой способ подумать об этом заключается в том, что, хотя вы не можете явно передавать переменные по ссылке в Python, вы можете изменить свойства объектов, которые были переданы. В моем примере (и других) вы можете изменить членов списка, который был передан. Однако вы не сможете переназначить переданную в переменной полностью. Например, см. Следующие две части кода: они могут сделать что-то подобное, но в итоге получаются разные результаты:

def clear_a(x):
  x = []

def clear_b(x):
  while x: x.pop()

z = [1,2,3]
clear_a(z) # z will not be changed
clear_b(z) # z will be emptied
0
задан ai_learning 11 March 2019 в 15:33
поделиться

1 ответ

Вы хотите разделить свои данные на обучающие и тестовые наборы. Для этого вы можете либо

  1. вручную, либо с помощью сценария отдельно обучать и тестировать папки и загружать их для обучения с помощью генератора данных.

  2. Загрузка целых данных и разделение их для обучения и проверки в памяти.

Давайте обсудим второй вариант.

главный каталог содержит 40 подкаталогов

Предположим, что ваш главный каталог - Train//, и есть 40 подпапок, а именно 1-40. Кроме того, я предполагаю, что метка класса - это имя папки.

# imports

import cv2
import numpy as np
import os

from sklearn.model_selection import train_test_split

# seed for reproducibility
SEED = 44000


# lists to store data
data = []
label = []

# folder where data is placed
BASE_FOLDER = 'Train//'

folders = os.listdir(BASE_FOLDER)

# loading data to lists
for folder in folders:
    for file in os.listdir(BASE_FOLDER + folder + '//'):
        img = cv2.imread(BASE_FOLDER + folder + '//' + file)
        # do any pre-processing if needed like resize, sharpen etc.
        data = data.append(img)
        label = label.append(folder)

# now split the data in to train and test with the help of train_test_split

train_data, test_data, train_label, test_label = train_test_split(data, label, test_size=0.2, random_state=SEED)
0
ответ дан Sreeram TP 11 March 2019 в 15:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: