如何解决最小化标准偏差的方法
情况:我正在编写一个脚本,可以预测赛马并下注。它主要使用两个函数来工作,我们将其称为 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 举报,一经查实,本站将立刻删除。