我在Excel中执行解算器函数以最小化变量并获得成功。下面我们可以看到我是如何做到的:
在Python中,我导入了带有“客场球队”、“客场球员”、“主场球队”、“主场球员”、“比赛总数”和“主场球员”信息的表,然后我创建了两个以上与将最小化的变量相关的列。在添加的第一列中,变量与主队实力(ht1、ht2、…、ht18)相关,相当于Excel中AB列中的变量;在第二列中,有客队实力变量(at1、at2、…、at18),相当于Excel中的AC列
它们将在公式中用于计算主客场球队的参数估计值,就像在Excel中所做的那样:
其中Hadj为“主场调整”,Aadj为“客场调整”
这里我最大的挑战是知道如何在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))
目前没有回答
相关问题 更多 >
编程相关推荐