Я стараюсь параллельно запустить несколько алгоритмов машинного обучения (из scikit-learn) и использую класс Process с переменной, общей для процессов, чтобы сохранить результаты.
К сожалениюмой код никогда не заканчивается. Может ли это быть проблема с памятью, потому что я использую 10 довольно тяжелых алгоритмов? Или это просто медленно?
Я пытался разделить весь код на две части (я думал, что это сделает его быстрее), однако, это ничего не меняет ...
Обратите внимание, что train_bow и test_bow - это просто плавающие векторы.
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import MultinomialNB, ComplementNB, BernoulliNB
from sklearn.ensemble import GradientBoostingClassifier, AdaBoostClassifier, VotingClassifier, ExtraTreesClassifier
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier as Knn
from sklearn.feature_extraction.text import TfidfVectorizer
#Custom class
from utilities.db_handler import *
from utilities.utils import *
from multiprocessing import Process, Manager
import json
import pickle as pkl
import os
import numpy as np
import pandas as pd
manager = Manager()
return_dict = manager.dict()
# Use a shared variable in order to get the results
proc = []
fncs1 = [random_forest_classification, SVC_classification, LinearSVC_classification, MultinomialNB_classification,
LogisticRegression_classification]
fncs2 = [BernoulliNB_classification, GradientBoosting_classification,
AdaBoost_classification, VotingClassifier_classification, ComplementNB_classification,
ExtrExtraTrees_classification]
# Instantiating 2 set of processes with relative arguments. Each function
# writes the result on result_dict
for fn in fncs1:
p = Process(target=fn, args=(train_bow, test_bow, label_train, label_test, return_dict))
proc.append(p)
p.start()
for p in proc:
p.join()
for fn in fncs2:
p = Process(target=fn, args=(train_bow, test_bow, label_train, label_test, return_dict))
proc.append(p)
p.start()
for p in proc:
p.join()
# then pick te best of the results from return_dict and save them
Этот код дает мне несколько предупреждений, относящихся к алгоритмам, но не показывает ошибок или предупреждений, связанных с многопроцессорностью.