【发布时间】:2020-11-28 15:06:33
【问题描述】:
我有以下模型来预测“主队的胜利幅度(home MOV)”:
模型 = HAdv + (HT * homeSkills) + (AT * awaySkills)
其中“HAd”是主场优势,“HT”是主队,“AT”是客队,“homeSkills”和“awaySkills”是在包含 198 个样本的 pandas DataFrame 中给出的球队的技能数据还包括每个游戏的“Home MOV”列。
# Transform the panda columns values in np.array
homeSkills = games['Home Skills'].to_numpy()
awaySkills = games['Away Skills'].to_numpy()
homeMOV = games['Home MOV'].to_numpy()
我要做的就是求解变量(HAAdv、HT、AT)并获得最小值以使平方误差和 (SSE) 最小化。
SSE = ((model - HomeMOV)^2).sum()
其中“homeMOV”是之前使用 DataFrame 给出的数据设置的数组。
这是我的代码:
from scipy.optimize import minimize
# INITIAL CONDITIONS
HAdv_0 = 100.
HT_0 = 100.
AT_0 = 100.
v0 = [HAdv_0, HT_0, AT_0]
# DATA TO BE ANALIZED
Y = homeMOV
def model (v, p):
# Unpack variables
HAdv, HT, AT = v
# Unpack parameters
homeSkills, awaySkills = p
# Model
f = HAdv + (HT * homeSkills) + (AT * awaySkills)
return f
def sum_of_squares(Y,v,p):
f = model(v, p)
obj = np.array(((f - Y)**2)).sum()
return obj
res = minimize(sum_of_squares, v0, options={'disp':True})
我收到以下错误:sum_of_squares() 缺少 2 个必需的位置参数:'v' 和 'p'
我不知道这是否是唯一错误。我认为在这种最小化中我无法解决其他一些问题。有人可以帮助我完成这项任务,我在将近 2 周的时间里试图解决这个值,拜托。非常感谢。
【问题讨论】:
-
minimize()需要什么参数? -
cipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=无,回调=无,选项=无)我把函数和初步猜测。不知道是不是设置的正确,我尝试了一些其他的方法,包括args,但是我无法运行minimize。
-
fun的“签名”是什么?也就是minimize的第一个参数应该怎么定义? -
我的“乐趣”是 sum_of_squares 函数,我最初的猜测是 v0 作为一个列表。最小化参数中的 'fun' 只是表明目标函数在那里,但它也不需要命名为 'fun'。
-
指向有关最小化()的文档。
标签: python optimization scipy solver minimize