Python fmin 太慢

标签 python optimization numpy scipy

我在 x_data 中有一个 3x2000 numpy 数组,在 y_data 中有一个 1x2000 numpy 数组,我将其传递给此函数 regress 以给我一条回归线。它工作正常。问题是我正在尝试进行一些回测并测试 1000 种情况,我必须回归 1000 次,这将花费我大约 5 分钟的时间来运行它。

我尝试标准化变量,但似乎并没有使它更快。

我还简要地尝试了 fmin_powell 和 fmin_bfgs,这似乎打破了它。

有什么想法吗?谢谢!

def regress(x_data, y_data, fg_spread, fg_line):

    theta = np.matrix(np.ones((1,x_data.shape[0]))*.11)
    hyp = lambda theta, x: 1 / (1 + np.exp(-(theta*x)))
    cost_hyp = lambda theta, x, y: ((np.multiply(-y,np.log10(hyp(theta,x)))) - \
                            (np.multiply((1-y),(np.log10(1-hyp(theta, x)))))).sum()

    theta = scipy.optimize.fmin(cost_hyp, theta, args=(x_data,y_data), xtol=.00001, disp=0)

    return hyp(np.matrix(theta),np.matrix([1,fg_spread, fg_line]).reshape(3,1))

最佳答案

使用numexpr使你的 hyp 和 cost_hyp 计算更快地评估。 fmin 函数族针对不同的条目多次计算这些函数。因此,这些函数的任何增益都直接在最小化中报告。

例如,您将替换:

hyp = lambda theta, x: 1 / (1 + np.exp(-(theta*x)))

通过:

hyp = lambda theta, x: numexpr.evaluate("1 / (1 + exp(-(theta*x)))")

Numexpr 旨在与 numpy 数组一起使用。

关于Python fmin 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254898/

相关文章:

python - 将 `exec()` 输出发送到另一个流而不重定向标准输出

python - 将列表排序为字典中的值(类似于 pandas.sort_values)

javascript - 一个不会明显减慢速度的页面应包含的最大标签数是多少?

python - 使用 Gekko 的 ARX 模型的 MPC

python - 我可以装饰一个显式函数调用吗,比如 np.sqrt()

python - Django 1.6+ 测试未发现位于测试子目录中的单元测试

python - Alembic 不处理 column_types.PasswordType : Flask+SQLAlchemy+Alembic

python - 使用 df.loc 将列表有效地存储到 pandas 中

python - 为什么用透视相机翻转轴?

python - 通过分布项乘以 Numpy 数组