Вот что я пытаюсь сделать. Создайте функцию, которая принимает две серии (x, y), затем вычисляет и возвращает коэффициенты перехвата и наклона, которые минимизируют SSE.
Я написал нижеприведенную функцию, которая принимает две серии и возвращает перехват (B0) и наклон (B1) для уравнения линейной регрессии. Проблема? Ценности выглядят неправильно для меня. Я знаю, что это грубый способ написать эту функцию. Советы как улучшить?
import pandas as pd
import numpy as np
def coeff(Series_y,Series_x):
beta_0 = 0
beta_1 = 0
y_list = Series_y.tolist()
x_list = Series_x.tolist()
y_list_array = np.array(y_list)
x_list_array = np.array(x_list)
y_list_mean = np.mean(y_list_array)
x_list_mean = np.mean(x_list_array)
y_list_stdev = np.std(y_list_array)
x_list_stdev = np.std(x_list_array)
r_x_y = np.corrcoef(x_list_array,y_list_array)
beta_1 = r_x_y * (y_list_stdev/x_list_stdev)
beta_0 = y_list_mean - (beta_1 * x_list_mean)
return beta_0
return beta_1
print(beta_0, beta_1)
Я переписал эту функцию. Это все еще очень неуклюже.
# create the needed variables
beta_0 = 0
beta_1 = 0
r_x_y = 0
y_list = 0
x_list = 0
y_list_array = 0
x_list_array = 0
y_list_mean = 0
x_list_mean = 0
y_list_stdev = 0
x_list_stdev = 0
def coeff(Series_y,Series_x):
# create the two needed beta variables
# calculate needed stats
y_list = Series_y.tolist()
x_list = Series_x.tolist()
y_list_array = np.array(y_list)
x_list_array = np.array(x_list)
y_list_mean = np.mean(y_list_array)
x_list_mean = np.mean(x_list_array)
y_list_stdev = np.std(y_list_array)
x_list_stdev = np.std(x_list_array)
r_x_y = np.corrcoef(x_list_array,y_list_array)
return x_list_mean, y_list_mean, x_list_stdev, y_list_stdev, r_x_y
# calculate the beta coefficients
beta_1 = r_x_y * (y_list_stdev/x_list_stdev)
beta_0 = y_list_mean - (beta_1 * x_list_mean)
return beta_0, beta_1
# Return line of best fit.
return beta_0 + beta_1 * x
print(beta_0 + beta_1 * x)
Я переписал его по предложению Билла. Намного проще!
def coeff(Series1, Series2):
return print(scipy.stats.linregress(Series1, Series2))