问题描述
我在Excel中执行了求解器函数以最小化变量并获得成功。我们可以在下面看到我的制作方法:
- 首先,我们获得了与“客队”,“客场”,“主场”的比赛表 团队”,“主场得分”,“比赛总数”,“主场移动”:
- 然后,我们得到每个团队需要最小化的变量:
在Python中,我导入了表“ Away Team”,“ Away Pts”,“ Home Team”,“ Home Pts”,“ Game Total”和“ Home MoV”信息,然后创建了更多与以下内容相关的两列将被最小化的变量。在添加的第一列中,变量与主队实力(ht1,ht2,...,ht18)相关,等同于Excel中AB列中的变量,在第二列中,有客队实力变量(at1,at2 ,...,at18),相当于Excel中的AC列。
它们将用于公式中,以便像以前在Excel中一样为主队和客队计算参数估算:
- PEhome = Hadj + ht [i]-at [i];
- PEaway = Aadj + ht [i]-at [i]
其中Hadj是“房屋调整”,而Aadj是“客舱调整”。
- 如何获得 Hadj , Aadj 以及所有 ht [i] 和 at [i] 的解决方法是否应用OLS最小化?
我最大的挑战是知道如何在python中进行设置,如果真的需要添加带有变量的列,以及如何组织所有这些以使用scipy.minimization。
注意:在使用“ np.linalg.lstsq”之前,我已经解决了变量,该操作变得如此简单和容易,但是目前,我的变量在熊猫数据帧的每一行中都会发生变化。我的疑问是如何设置所有这些值以解决这些值。因此,我尝试应用“ scipy.minimization”来完成此任务,但没有成功。但这不是正确的组织方式。下面的代码。
# Variables to be minimized
'''Get unique variables in columns 'HT' and 'AT',sort items,and append more two variables that will be also minimized: 'Hadj',and 'Aadj',that is home and away adjustments.'''
var = np.concatenate([games['HT'].unique(),games['AT'].unique()])
var = sorted(var,key=lambda x: int("".join([i for i in x if i.isdigit()])))
var = np.append(var,['Hadj','Aadj'])
# Initial values for var to be minimized
initial = np.repeat(10.,var.size)
# ratings for home and away team
def func(coeffs,var,games):
# Parameter Estimate for Home and Away teams:
lookup = dict()
for i in range(len(var)):
lookup[var[i]] = coeffs[i]
games = games.replace(lookup)
'''functions = Home Adjustment + home team - away team
Away Adjustment + home team - away team'''
peH = games['Hadj'] + games['HT'] - games['AT']
peA = games['Aadj'] + games['HT'] - games['AT']
# EXP Function
expFH = math.exp(peH) / (1 + math.exp(peH))
expFA = math.exp(peA) / (1 + math.exp(peA))
# Z score
homeZs = norm.cdf(expFH)
awayZs = norm.cdf(expFA)
# Estimated Points
estHP = avgHP + (homeZs * stdevHP)
estAP = avgAP + (awayZs * stdevAP)
# Errors Sq for each teams,then sum them all
homeEsq = np.array((estHP - games['Home Pts'])**2).sum()
awayEsq = np.array((estAP - games['Away Pts'])**2).sum()
totalEsq = homeEsq + awayEsq
return totalEsq
res = minimize(func,x0=initial,args=(var,games))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)