#python #numpy #solver #minimization #scipy-optimize-minimize
#python #numpy #решатель #минимизация #scipy-оптимизировать-минимизировать
Вопрос:
Я выполнил функцию решателя в Excel, чтобы минимизировать переменные и добиться успеха. Мы можем увидеть, как я это сделал ниже:
- Сначала мы получили таблицу совпадений с «Команда гостей», «Очки гостей», «Домашняя команда», «Домашние очки», «Общее количество игр», «Домашняя игра»:
- Затем мы получаем переменные, которые необходимо минимизировать для каждой команды:
- Вот настройка функции решателя, которую я хочу воспроизвести в Python:
В Python я импортировал таблицу с информацией «Команда гостей», «Очки гостей», «Домашняя команда», «Домашние очки», «Общее количество игр» и «Домашняя навигация», затем я создаю еще два столбца, связанные с переменными, которые будут сведены к минимуму. В первом добавленном столбце переменные связаны с силой домашней команды (ht1, ht2, …, ht18), эквивалентной переменным в столбце AB в Excel, во втором столбце есть переменные силы команды гостей (at1, at2, …, at18), которые эквивалентны столбцу AC в Excel.
Они будут использоваться в формулах для вычисления оценки параметров для домашних и выездных команд, как это обычно делается в 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», что намного проще и понятнее, но в настоящее время у меня есть переменные, которые изменяются в каждой строке фрейма данных pandas. Я сомневаюсь, как я могу настроить все это, чтобы решить эти значения. Итак, я безуспешно попытался применить «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))
Комментарии:
1. Возможно, взгляните на scipy.optimize.linprog