Как я могу решить переменные в pandas dataframe?

#python #numpy #solver #minimization #scipy-optimize-minimize

#python #numpy #решатель #минимизация #scipy-оптимизировать-минимизировать

Вопрос:

Я выполнил функцию решателя в Excel, чтобы минимизировать переменные и добиться успеха. Мы можем увидеть, как я это сделал ниже:

  • Сначала мы получили таблицу совпадений с «Команда гостей», «Очки гостей», «Домашняя команда», «Домашние очки», «Общее количество игр», «Домашняя игра»:

Таблица Excel

  • Затем мы получаем переменные, которые необходимо минимизировать для каждой команды:

Переменные сведены к минимуму

  • Вот настройка функции решателя, которую я хочу воспроизвести в Python:

Настройте функцию решателя

В Python я импортировал таблицу с информацией «Команда гостей», «Очки гостей», «Домашняя команда», «Домашние очки», «Общее количество игр» и «Домашняя навигация», затем я создаю еще два столбца, связанные с переменными, которые будут сведены к минимуму. В первом добавленном столбце переменные связаны с силой домашней команды (ht1, ht2, …, ht18), эквивалентной переменным в столбце AB в Excel, во втором столбце есть переменные силы команды гостей (at1, at2, …, at18), которые эквивалентны столбцу AC в Excel.

Они будут использоваться в формулах для вычисления оценки параметров для домашних и выездных команд, как это обычно делается в Excel:

  1. PEhome = Hadj ht[i] — at[i];
  2. 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