разделить данные на обучение и тестирование - PullRequest
0 голосов
/ 11 июня 2019

Я хочу повторить этот урок, чтобы классифицировать две группы https://machinelearningmastery.com/develop-n-gram-multichannel-convolutional-neural-network-sentiment-analysis/ с разными наборами данных, но не смог этого сделать, несмотря на то, что едва пытался.Я новичок в программировании, поэтому буду признателен за любую помощь или советы, которые могут помочь.

Мой набор данных небольшой (240 файлов для каждой группы) и файлы с именами 01 - 0240.

эти строки кодов, я думаю.

    if is_trian and filename.startswith('cv9'):
        continue
    if not is_trian and not filename.startswith('cv9'):
        continue

, а также эти

            trainy = [0 for _ in range(900)] + [1 for _ in range(900)]
            save_dataset([trainX,trainy], 'train.pkl')

            testY = [0 for _ in range(100)] + [1 for _ in range(100)]
            save_dataset([testX,testY], 'test.pkl')

до сих пор встречались две ошибки:

Входные массивы должны иметьстолько же выборок, сколько и целевых массивов.Найдено 483 входных семпла и 200 целевых семплов.

Невозможно открыть файл (невозможно открыть файл: name = 'model.h5', errno = 2, сообщение об ошибке = 'Нет такого файла или каталога', flags =0, o_flags = 0)

Буду очень признателен за любую быструю помощь.

Заранее спасибо.

// Часть кода для большей ясности.//

# load all docs in a directory
def process_docs(directory, is_trian):
    documents = list()
    # walk through all files in the folder
    for filename in listdir(directory):
        # skip any transcript in the test set

Я хочу добавить аргумент ниже, чтобы указать, обрабатывать ли файлы обучения или тестирования, как указано в руководстве.Или, если есть другой способ, пожалуйста, поделитесь им

        if is_trian and filename.startswith('----'):
            continue
        if not is_trian and not filename.startswith('----'):
            continue
        # create the full path of the file to open
        path = directory + '/' + filename
        # load the doc
        doc = load_doc(path)
        # clean doc
        tokens = clean_doc(doc)
        # add to list
        documents.append(tokens)
    return documents

# save a dataset to file
def save_dataset(dataset, filename):
    dump(dataset, open(filename, 'wb'))
    print('Saved: %s' % filename)

# load all training transcripts
healthy_docs = process_docs('PathToData/healthy', True)
sick_docs = process_docs('PathToData/sick', True)
trainX = healthy_docs + sick_docs
trainy = [0 for _ in range(len( healthy_docs ))] + [1 for _ in range(len( sick_docs ))]
save_dataset([trainX,trainy], 'train.pkl')

# load all test transcripts
healthy_docs = process_docs('PathToData/healthy', False)
sick_docs = process_docs('PathToData/sick', False)
testX = healthy_docs + sick_docs
testY = [0 for _ in range(len( healthy_docs ))] + [1 for _ in range(len( sick_docs ))]

save_dataset([testX,testY], 'test.pkl')

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Мне удалось решить проблему, разделив набор данных на наборы поездов и тестов вручную, а затем пометив каждый набор отдельно.Мой текущий набор данных настолько мал, что я буду продолжать искать лучшее решение для больших наборов данных, как только у меня будет емкость.Предусмотрено закрыть вопрос.

0 голосов
/ 11 июня 2019

Вы должны опубликовать больше своего кода, но похоже, что ваша проблема заключается в исправлении данных.Скажем, у вас есть 240 файлов в папке «здоровые» и 240 файлов в папке «больные».Затем вам нужно маркировать всех здоровых людей этикеткой 0, а всех больных - этикеткой 1. Попробуйте что-то вроде:

from glob import glob 
from sklearn.model_selection import train_test_split

#get the filenames for healthy people 
xhealthy = [ fname for fname in glob( 'pathToData/healthy/*' )]

#give healthy people label of 0
yhealthy = [ 0 for i in range( len( xhealthy ))]

#get the filenames of sick people
xsick    = [ fname for fname in glob( 'pathToData/sick/*')]

#give sick people label of 1
ysick    = [ 1 for i in range( len( xsick ))]

#combine the data 
xdata = xhealthy + xsick 
ydata = yhealthy + ysick 

#create the training and test set 
X_train, X_test, y_train, y_test = train_test_split(xdata, ydata, test_size=0.1)

Затем обучите свои модели X_train, Y_train и протестируйте их с X_test, Y_test -помните, что ваши X_data - это просто имена файлов, которые все еще нуждаются в обработке.Чем больше кода вы разместите, тем больше людей сможет помочь с вашим вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...