У меня есть функция (градиентный спуск) в Python, которая возвращает мне некоторые значения:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def read_data(file):
df = pd.read_excel(file)
x_data= np.array(df['X_axis'])
y_data = np.array(df['Y_axis'])
return x_data,y_data
x_data ,y_data = read_data('path\file')
alpha= 10**-8
#Auxiliaries Functions
...
здесь есть функция:
def gradient(x_axis,y_axis):
current_iteration = 0
iterations_number= 100
#Initial values
#I guess that the problem is here. When I print those initial
#values,inside the function, they are different from what they should be
A1_inicial = y_axis[0]
A2_inicial = y_axis[-1]
x0_inicial = np.mean(x_axis)
dx_inicial = (np.std(x_axis))
while current_iteration < iterations_number:
sum_A1 = 0
sum_A2 = 0
sum_dx = 0
sum_x0 = 0
for x_values,y_values in zip(x_axis, y_axis):
sum_A1 += derivada_A1(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_A2 += derivada_A2(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_dx += derivada_dx(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_x0 += derivada_x0(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
A1_inicial = A1_inicial - (alpha* sum_A1 )
A2_inicial = A2_inicial - (alpha* sum_A2 )
x0_inicial = x0_inicial - (alpha* sum_x0 )
dx_inicial = dx_inicial - (alpha* sum_dx )
return A1_inicial,A2_inicial,x0_inicial,dx_inicial
current_iteration+=1
Итак, проблема в том, что всякий раз, когдаЯ использую эту функцию, мои значения, которые возвращаются, неверны.Я знаю, что они не правы, потому что у меня есть реальные ценности для сравнения.
Вот как я использую функцию:
new_y = []
A1_inicial,A2_inicial,x0_inicial,dx_inicial = gradient(x_axis,y_axis)
for x in x_axis:
new_y.append(A2_inicial + ((A1_inicial - A2_inicial) /(1+np.exp((x- x0_inicial)/dx_inicial))))
print("A1: {}".format(A1_inicial))
print("A2: {}".format(A2_inicial))
print("X0: {}".format(x0_inicial))
print("DX: {}".format(dx_inicial))
И я знаю, что если я отменю эту функцию, вот так:
current_iteration = 0
iterations_number= 100
A1_inicial = y_axis[0]
A2_inicial = y_axis[-1]
x0_inicial = np.mean(x_axis)
dx_inicial = (np.std(x_axis))
while current_iteration < iterations_number:
sum_A1 = 0
sum_A2 = 0
sum_dx = 0
sum_x0 = 0
for x_values,y_values in zip(x_axis, y_axis):
sum_A1 += derivada_A1(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_A2 += derivada_A2(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_dx += derivada_dx(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
sum_x0 += derivada_x0(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values )
A1_inicial = A1_inicial - (alpha* sum_A1 )
A2_inicial = A2_inicial - (alpha* sum_A2 )
x0_inicial = x0_inicial - (alpha* sum_x0 )
dx_inicial = dx_inicial - (alpha* sum_dx )
И затем:
new_y = []
for x in x_axis:
new_y.append(A2_inicial + ((A1_inicial - A2_inicial) /(1+np.exp((x- x0_inicial)/dx_inicial))))
print("A1: {}".format(A1_inicial))
print("A2: {}".format(A2_inicial))
print("X0: {}".format(x0_inicial))
print("DX: {}".format(dx_inicial))
Это работает, давая мне правильные значения, но я не знаю, что не так с функцией и почему она не работает.
Спасибо за помощь!