2016-07-28 4 views
0

У меня есть программа python, которая создана в ноутбуке Jupter. Из-за используемого множителя данных и оптимизационного алгоритма 4-кратная пользовательская перекрестная проверка в некотором диапазоне занимает около 30 минут.Как я могу ускорить свою программу, созданную в Jupyter Notebook?

Окружающая среда компьютера: CPU i5 3,3 ГГц, 8 ГБ оперативной памяти DDR3, SSD.

Я задаюсь

  1. Если можно развернуть его на какой-то сервер и может сделать скорость немного быстрее? (Файл данных составляет всего около 30 МБ, я думаю, что можно загружать данные и программу). И это также может помочь другим, кто хочет использовать программу.

  2. Могу ли я сделать что-нибудь, чтобы ускорить проверку креста? Это добрый ручный процесс. Я использую sklearn.cross_validation.KFold для извлечения поезда и тестового набора. Затем я прокручиваю каждую складку, чтобы построить модель и проверить ее результат. Я не уверен, возможно ли инкапсулировать мой метод построения модели и выполнить проверку перекрестных ссылок в parrallel?

+0

Не могли бы вы использовать эту функцию? cross_validation.cross_val_score (clf, X_digits, y_digits, cv = kfold, n_jobs = -1). Тогда n_jobs будет параметром для указания количества используемых процессов/cpus. – Ohumeronen

+0

@Ohumeronen, но этот пользовательский 'clf' довольно сложно сделать. В моей пользовательской перекрестной проверке он включает в себя KDE, алгоритм оптимизации и некоторые другие. – cqcn1991

+0

Итак, вы используете свой собственный классификатор, который не будет принят для параметра clf? Для вашего первого вопроса я предлагаю арендовать или настроить сервер и ознакомиться с SSH. Возможно, с параметром -X для визуального взаимодействия с сервером. – Ohumeronen

ответ

0

1: Есть пара платных серверов HPC, таких как Amazon, но это не относится к SO.

2: Итерация проверки креста может выполняться параллельно.

Поскольку поперечные валидация не связаны, я хотел бы предложить что-то вроде этого:

import multiprocessing 

def validation_function(args): 
    do_validation 
    ... 
    ... 

p = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
for _ in p.imap_unordered(validation_function, args): 
    pass 
+0

Есть ли какая-либо рекомендация по документам? Я использую nerver 'multiprocessing', я читаю https://docs.python.org/2.7/library/multiprocessing.html, но это кажется слишком длинным. – cqcn1991

+1

Я думаю, что это хорошее место для начала. Параллелизация - непростая задача. –

+0

Кроме того, карта уменьшает качество моей проблемы? – cqcn1991

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