#python #regression #mathematical-optimization #poisson
Вопрос:
У меня есть данные формы
n = number of samples
features: n x 1 matrix
data: n x m matrix
Я хочу выполнить несколько регрессий Пуассона с одним и тем же features
, где выходные значения различаются по столбцам данных. В настоящее время я выполняю одну регрессию Пуассона за раз, используя sklearn
, например, мой код на Python выглядит примерно так
from sklearn import linear_model
clf = linear_model.PoissonRegressor(fit_intercept=True,alpha=0)
for col in range(m):
clf.fit(features,data[:,col])
Однако мне приходится выполнять многие из этих пуассоновских регрессий, и слишком медленно выполнять их все по отдельности. Итак, мой вопрос: есть ли способ (в Python), чтобы я мог одновременно выполнять все m этих регрессий Пуассона одновременно?
Если бы я вместо этого занимался линейной регрессией, то мог бы использовать хорошие матричные трюки, чтобы делать это одновременно. Однако ключевое различие здесь заключается в том, что регрессия Пуассона предполагает использование алгоритма оптимизации для максимизации функции правдоподобия. Поэтому, по сути, я хотел бы решить сразу несколько задач оптимизации.
Одна вещь, которую я пытался использовать scipy.optimize
, заключалась в максимизации суммы (логарифмических) вероятностей для каждой регрессии Пуассона. Однако это было невероятно чувствительно к инициализации и не сходилось.
Таким образом, я надеюсь, что есть либо:
- лучший пакет оптимизации Python, который я могу использовать для максимизации целевой функции регрессии Пуассона (сумма вероятностей), или
- пакет Python, который позволяет выполнять одновременные регрессии Пуассона.
У кого-нибудь есть какие-нибудь идеи? Любая помощь была бы очень признательна. Спасибо!
Ответ №1:
Похоже, вы ищете многопроцессорную обработку.
это позволит вам одновременно выполнить N вычислений регрессии Пуассона.
Простой пример ниже:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
Комментарии:
1. Спасибо! Это очень полезно!