Я хочу установить две скорости обучения (альфа): одну для первой половины данных и одну для второй половины данных. Мне удалось сделать это всего за одно обучение, но я сталкиваюсь с ошибками при попытке уместить два.
Эти функции работают при минимизации одной переменной:
optimize.fminbound(sse_f,0,1)
minimize_scalar(sse_f, bounds=(0,1), method='bounded')
Я не уверен, могу ли я использовать fminbound / minim_scalar или мне следует использовать minim () для двух скоростей обучения (альфа).
Моя функция выглядит примерно так: я удалил несколько строк для простоты, но в основном я хочу минимизировать SSE для первой половины данных и второй половины отдельно.
def sse_f(a_1,a_2):
data = []
for _, row in temp.iterrows():
alpha = a_1 #for first 120 rows use one alpha
if row['trial_nr'] == 120: #for rows after 120 use second alpha
alpha = a_2
#calculate diff variables removed for simplicity
data.append([phase,pi,abs_PE])
col = ['phase','abs_PE','congruency']
df_ = pd.DataFrame(data, columns= col)
df_a = df[(df['phase']=='a')]
df_b = df[(df['phase']=='b')]
x = np.array(df_a[['congruency','abs_PE']]) #run linear regression for first half
y = df_a['RT']
sse_a = lin_reg(x,y)
x_b = np.array(df_b[['congruency','abs_PE']]) #run linear regression for second half
y_b = df_b['RT']
sse_b = lin_reg(x_b,y_b) #calculate SSE
return sse_a,sse_b #return SSE for first half and second half of data
Результатом этой функции будет кортеж, например:
sse_f(.43,.43)
(54487466.6875101, 17251575.11206138)
Если я использую минимизацию (), я получаю эту ошибку:
minimize(sse_f, x0=(0,0), bounds=[(0,0),(1,1)])
TypeError: sse_f() missing 1 required positional argument: 'a_2'
И если я использую minim_scalar (), я получаю эту ошибку:
ValueError: Optimisation bounds must be scalars or array scalars.
Будем очень признательны за любые указания относительно того, как подогнать две альфы или почему я получаю эти ошибки!
x0
- это двухэлементный кортеж. Это то, чтоminimize
передаст вашей функции (как массив), а затем изменится в последующих вызовах. Внимательно прочтите документацию и точно следуйте ей. - person hpaulj   schedule 29.12.2020