2015-06-23 2 views
1

Я написал сценарий python, чтобы взять большой файл (матрица ~ 50k строк X ~ 500 cols) и использовать его в качестве набора данных для обучения случайной модели леса.Как избежать повторного загрузки большого файла в скрипт python?

Мой сценарий имеет две функции: одну для загрузки набора данных, а другую для обучения случайной модели леса с использованием указанных данных. Они оба работают нормально, но загрузка файла занимает ~ 45 секунд, и это больно делать это каждый раз, когда я хочу обучать тонкую другую модель (тестирование многих моделей на одном наборе данных). Вот код загрузки файла:

def load_train_data(train_file): 
    # Read in training file 
    train_f = io.open(train_file) 
    train_id_list = [] 
    train_val_list = [] 
    for line in train_f: 
     list_line = line.strip().split("\t") 
     if list_line[0] != "Domain": 
      train_identifier = list_line[9] 
      train_values = list_line[12:] 
      train_id_list.append(train_identifier) 
      train_val_float = [float(x) for x in train_values] 
      train_val_list.append(train_val_float) 
    train_f.close() 
    train_val_array = np.asarray(train_val_list) 

    return(train_id_list,train_val_array) 

Это возвращает массив numpy с col. 9 в качестве метки и столбцов. 12-end в качестве метаданных для обучения случайному лесу.

Я собираюсь обучить много разных форм моей модели с одинаковыми данными, поэтому я просто хочу загрузить файл один раз и предоставить его для загрузки в мою случайную функцию леса. Я хочу, чтобы файл был объектом, который я думаю (я довольно новичок в python).

+0

Я считаю, что если вы запускаете консоль python, вы можете загрузить файл один раз, а затем загружать другие файлы/функции вызова отдельно, не перезагружая файл. – user985366

+0

Вы должны посмотреть на [pandas] (http://pandas.pydata.org).) для обработки данных. Манипулирование данными с помощью него - детская игра. Вы сможете быстро схватить его, если раньше вы использовали R. В частности, вы должны взглянуть на функции 'read_xxx' в документации, которые позволяют загружать различные форматы файлов в фреймворк данных. –

ответ

0

простым способом было бы кэшировать результаты, например, так:

_train_data_cache = {} 
def load_cached_train_data(train_file): 
    if train_file not in _train_data_cache: 
    _train_data_cache[train_file] = load_train_data(train_file) 
    return _train_data_cache[train_file] 
0

Try, чтобы узнать о Python сериализации данных. В основном вы будете хранить большой файл как специфический для python, сериализованный двоичный объект, используя функцию marshal python. Это значительно ускорит IO файла. См. these. Однако, если эти случайные лесные модели будут обучены одновременно, вы можете просто обучить их тому набору данных, который у вас уже есть, а затем отправить данные о поездке после завершения.

1

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

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

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

Если все ваши изменения модели могут быть определены как параметры в вызове функции, все, что вам нужно, это импортировать вашу модель, а затем вызвать функцию обучения с различными параметрами.

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

Если вы не хотите, чтобы сохранить каждую модификацию модели с новым именем, вы можете быть в состоянии использовать функциональные возможности перезагрузки в зависимости от версии питона, но это не рекомендуется (см Proper way to reload a python module from the console)

Смежные вопросы