【发布时间】:2017-03-25 05:26:16
【问题描述】:
我有一个运行良好的 python 算法。我输入一个最小标准(“MinScore”),算法运行并预测结果。典型的 MinScore 值介于 0.2 和 0.99 之间。
但是为什么我使用 scipy optimize 来尝试找到 MinScore 值的最低算法输出,我收到以下错误:“ValueError: Lengths must match to compare”。
这就是我调用优化函数的方式:
Optimal_Score = spo.minimize(BRMalg, 0.81, method='SLSQP',
options={'disp':True}, bounds=[(-1.00,1.00)])
这是优化过程中出现算法错误的地方:
MinHoldScore = MinScore
Stocks['HOLD'] = (Stocks['HOLD'].where(Stocks['Total Score'].shift(1) < MinScore, True).where(Stocks['Total Score'].shift(1) >= MinHoldScore, False).ffill().fillna(False).astype(bool))
这是完整的错误信息:
> Traceback (most recent call last):
File "\\PYTHON CODE.py", line 327, in <module>
> Optimal_Score = spo.minimize(BRMalg, 0.81, method='SLSQP', options={'disp':True}, bounds=[(-1.00,1.00)])
File "C:\\scipy\optimize\_minimize.py",
> line 455, in minimize constraints, callback=callback, **options)
File "C:\Users\\scipy\optimize\slsqp.py",
> line 363, in _minimize_slsqp fx = func(x)
File "C:\Users\\scipy\optimize\optimize.py",
> line 289, in function_wrapper return function(*(wrapper_args + args))
File "T:\\PYTHON CODE.py", line 288, in BRMalg
> Stocks[Ticker]['HOLD'] = (Stocks[Ticker]['HOLD'].where(Stocks[Ticker]['TOTAL_SCORE_'+MarketIndex+'_'+str(BetaWindow)].shift(1) < MinBuyScore, True)
File "C:\Users\\pandas\core\ops.py",
> line 740, in wrapper raise ValueError('Lengths must match to compare') ValueError: Lengths must match to compare
有什么想法吗?很奇怪,当不使用 SCIPY OPTIMIZE 并且只传递一个 MinScore = 0.82 的值时,这一切都可以完美运行。
期待您的建议! :-)
【问题讨论】:
标签: python pandas optimization scipy minimize