最小化标准偏差的方法

问题描述

情况:我正在编写一个脚本,可以预测赛马并下注。它主要使用两个函数来工作,我们将其称为 N(用于归一化)和 E(用于评估),其中 E 使用由 N 给出的归一化概率。现在,N 依赖于一个因子 Beta,它可以改变为任何数字。如果 Beta > 1 --> 模型风险更大,如果 Beta 模型更保守,如果 Beta = 1 则不影响 N。

问题:我如何着手创建一个函数来找到最佳 Beta,从而使标准偏差最小化?

细节/问题:E(N) 有三个输出。第一个是最终银行,第二个是所述银行的“步骤”列表(银行在每次比赛后更新,因此该列表中的每一项都是每次比赛结束后的银行),第三个是标准差(SD)那个步骤列表。最小/最大 Beta 只是我知道最小值介于两者之间的一些值。

我确实意识到我可以使用蛮力找到最好的 Beta,方法是遍历 min/max Beta 之间的每个数字,但因为我的数据集已经包含大约 20k 匹马,并且每天额外收集 300-500 匹马这不是一个非常可行或省时的方法,所以我想出了下面的代码。简而言之,它取最小/最大 Beta 中间的一个值,获取该 Beta 的 SD 并将其与对应于最小/最大 Beta 的 SD 进行比较。然后相应地更新 min/max Beta 并继续迭代,直到 ERR 低于给定的容差。

我的代码:

maxBeta = 1.3
minBeta = 0.7
High = E(N(maxBeta))
Low = E(N(minBeta))
ERR = np.abs((Low[2]-High[2])/(Low[2]+High[2]))
Mid = 0
while ERR > tolerance:
    midBeta = (maxBeta+minBeta)/2
    Mid = E(N(midBeta))
    if Mid > High:
        maxBeta = midBeta
        High = E(N(maxBeta))
    elif Mid < High: 
        minBeta = midBeta
        Low = E(N(minBeta))
    else:
        return 0
    ERR = np.abs((Low[2]-High[2])/(Low[2]+High[2]))
return midBeta

解决方案?:当我针对 E(N)[0](所有比赛后的最终银行)运行此代码时,此代码运行良好,但当我为 E 执行此代码时,它会跳过值(N)[2] (SD),我有点明白它为什么会这样(它只是朝错误的方向移动,因为它不认为最小值可能位于它移动的相反方向)但是我真的不知道我将如何解决这个问题。

我在大学期间用 scipy.optimize 做了一些工作,但我真的不知道如何在这里应用它,因为 E(N) 并不是真正的“函数”(如多项式),这只是结果另一个功能,即绘制数据显示我在每次投注中赢/输了多少。为了使这个问题更加混乱,我不知道它是我正在寻找的全局最小值还是局部最小值,因为我无法检查最小/最大 Beta 之间的每个 Beta 值..

对此主题的任何投入都将不胜感激!干杯

EDIT 我很愚蠢,当代码正在寻找最大值时,找到最小 SD 显然不起作用.. 在 if 语句中,我只是将符号 ,反之亦然.

但无论如何,如果有更聪明的方法来做到这一点,或者代码中有缺陷,我仍然很高兴听到它!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...