Я пытаюсь распараллелить линейную модель с штрафом, используя многопроцессорную библиотеку в python.
Я создал функцию, которая решает мою модель:
from __future__ import division
import numpy as np
from cvxpy import *
def lm_lasso_solver(x, y, lambda1):
n = x.shape[0]
m = x.shape[1]
lambda1_param = Parameter(sign="positive")
betas_var = Variable(m)
response = dict(model='lm', penalization='l')
response["parameters"] = {"lambda_vector": lambda1}
lasso_penalization = lambda1_param * norm(betas_var, 1)
lm_penalization = 0.5 * sum_squares(y - x * betas_var)
objective = Minimize(lm_penalization + lasso_penalization)
problem = Problem(objective)
lambda1_param.value = lambda1
try:
problem.solve(solver=ECOS)
except:
try:
problem.solve(solver=CVXOPT)
except:
problem.solve(solver=SCS)
beta_sol = np.asarray(betas_var.value).flatten()
response["solution"] = beta_sol
return response
В этой функции x - это матрица предикторов, а y - переменная ответа.lambda1 - это параметр, который должен быть оптимизирован, и, следовательно, это параметр, который я хочу распараллелить.Я сохранил этот сценарий в файле Python с именем «ms.py»
Затем я создал другой файл Python с именем «parallelization.py», и в этом файле я определил следующее:
import multiprocessing as mp
import ms
import functools
def myFunction(x, y, lambda1):
pool = mp.Pool(processes=mp.cpu_count())
results = pool.map(functools.partial(ms.lm_lasso_solver, x=x, y=y), lambda1)
return results
Итак, теперь в интерпретаторе python идея была выполнена:
from sklearn.datasets import load_boston
boston = load_boston()
x = boston.data
y = boston.target
runfile('parallelization.py')
lambda_vector = np.array([1,2,3])
myFunction(x, y, lambda_vector)
Но когда я это сделал, я получил следующее сообщение об ошибке: ![enter image description here](https://i.stack.imgur.com/0XoYS.png)